Skip to content

Instantly share code, notes, and snippets.

View antop-dev's full-sized avatar

Antop antop-dev

View GitHub Profile
@antop-dev
antop-dev / JsonArrayColumnType.kt
Created January 17, 2025 03:17
Exposed MariDB(MySQL) JSON 컬럼과 Set<String> 타입일 매핑하기
package org.antop.board.common.exposed
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import org.jetbrains.exposed.sql.Column
import org.jetbrains.exposed.sql.ColumnType
import org.jetbrains.exposed.sql.Table
/**
* Set<String> ↔︎ JSON 타입 매핑 (내부는 [])
@antop-dev
antop-dev / HciService.kt
Created October 31, 2023 04:56
커스텀 어노테이션 기반 AOP + SpEL
import aop.SmsLimit
import org.springframework.stereotype.Service
@Service
class HciService(private val hciClient: HciFeignClient) {
@SmsLimit(key = "#tel")
fun sendSms(tel: String, content: String) {
// do something
}
@antop-dev
antop-dev / DispatcherServlet.java
Last active June 26, 2022 08:30
템플릿 메소드 패턴 - 스프링의 DispatcherServlet
package org.antop.billiardslove;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DispatcherServlet extends FrameworkServlet {
@Override
protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {
// implements
}
@antop-dev
antop-dev / EucKrEncodingFilter.java
Created October 13, 2020 07:22
나는 UTF-8을 사용하고 외부에서 EUC-KR로 요청이 올 때 받기
import org.springframework.web.filter.CharacterEncodingFilter;
public class EucKrEncodingFilter extends CharacterEncodingFilter {
public EucKrEncodingFilter() {
setEncoding("EUC-KR");
setForceEncoding(true);
}
}
@antop-dev
antop-dev / ZipSample.java
Created September 24, 2019 07:56
zip4j를 이용한 압축 with 비밀번호
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.EncryptionMethod;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;
package org.antop.rest;
import org.antop.rest.model.Doctor;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@antop-dev
antop-dev / PagingTag.java
Created July 21, 2019 08:01
jstl paging custom tag
import org.apache.taglibs.standard.tag.common.core.ParamParent;
import org.apache.taglibs.standard.tag.common.core.ParamSupport;
import org.apache.taglibs.standard.tag.common.core.UrlSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;
public class PagingTag extends BodyTagSupport implements ParamParent {
@antop-dev
antop-dev / TomcatAjpConfig.java
Created July 5, 2019 03:56
ajp with spring 1.x
package com.seerooinfo.fixedtag.spring.config;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@antop-dev
antop-dev / S2Service.java
Created June 11, 2019 01:43
Tika 로 파일 타입을 확인할 때 InputStream을 사용하고 복사에서 재사용하면 안된다.
// 주의! InputStream 으로 파일 타입을 파악하면 파이트를 갉아먹는다.
// 원본보다 복사되는 파일의 용량이 작아짐!
// content type
String contentType = new Tika().detect(savedPath);
if (StringUtils.isEmpty(contentType)) {
contentType = fo.getContentType();
}
@antop-dev
antop-dev / ContainerConfig.java
Created May 15, 2019 05:44
spring boot 2.x + tomcat + csrf + multipart
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ContainerConfig {
@Bean
public ServletWebServerFactory servletContainer() {