| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 개방 폐쇄 원칙
- 바이트 절삭
- try - with - resources
- Jndi DataSource
- requestheaderdto
- AfterMapping
- Sub Bytes
- Checked Exception
- 상호 인증
- Graphql Client
- Open Close Principal
- Srping MVC
- Request Body 여러 번 사용
- tomcat jndi
- Java Rest
- Tomcat DBCP
- WildFly
- Unchecked Exception
- java
- mapstruct
- HandlerMethodArgumentResolver
- 이중정렬
- Java Graphql
- Reading HttpServletRequest Multiple Times
- Java Singleton
- Socket is closed
- 데이터 압축
- graphql
- NoUniqueBeanDefinitionException
- mTLS
- Today
- Total
목록분류 전체보기 (32)
Developer Sang Guy
문자열 생성 코드private static final char[] CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();public static String getRandomString(int length) { StringBuilder temp = new StringBuilder(length); for (int i = 0; i 효율적인 메모리 할당을 위해 StringBuilder의 초기 용량을 설정각 스레드 별로 독립적인 난수를 생성하기 위해 ThreadLocalRandom 사용 문자열 생성 결과public static void main(String[] args) { System.out..
Stram Api를 활용한 정렬, 이중 정렬, 오름차순, 내림차순 적용 방법을 알아보자 정렬에 사용할 User 클래스@Builder@Getter@ToStringpublic class User { private String name; private Integer age;} 정렬에 사용할 Sample User ListList users = Arrays.asList( User.builder().name("김씨").age(25).build(), User.builder().name("김씨").age(16).build(), User.builder().name("김씨").age(33).build(), User.builder().name("이씨").age(19).b..
요새 RequestHeader에 로직 처리시 필요한 정보를 전달해주는 케이스가 자주 보여 HandlerMethodArgumentResolver를 활용하여 Header를 Dto로 바인딩하여 처리하는 코드를 사용하게 되었다. 헤더 정보를 바인딩할 Request Header Dto 객체import lombok.Builder;import lombok.Getter;import lombok.ToString;@Builder@Getter@ToStringpublic class RequestHeader { private String id; private boolean isMobile;} Handler에 매개 변수로 Request Header Dto를 사용하기 위해 Resolver 구현import org.springfra..
MappingTarget @Getter @ToString(exclude = "orders") @Table(name = "members") @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @DynamicUpdate public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; @Enumerated(EnumType.STRING) private Gender gender; @Setter private String email; @Column(name = "phone_number..
프로젝트 패키지 구조 도메인 분리 구조 장점 독립적으로 모듈화 되어 있는 도메인은 각 도메인에서 발생하는 변경 사항에 대한 영향을 최소화 하며 이는 시스템을 확장하고 유지 보수하기 쉽게 한다. 모듈화 (마이크로 서비스 아키텍처) 전환 시 도메인 별로 분리 작업이 용이하다. 단점 작은 규모의 프로젝트에서는 도메인 분리가 오히려 복잡성을 증가시킬 수 있다. 서로 다른 도메인에서 비슷한 기능이 필요한 경우 중복 코드의 가능성이 있다. 계층 분리 구조 장점 프로젝트에 대한 이해도가 낮아도 계층 별로 분리 된 패키지 구조만 보고 어느정도 구조 파악이 가능하다. 각 계층 간 코드 재사용 가능하며, 중복 코드를 최소화하고 일관성을 유지할 수 있다. 단점 계층 구조 아래 여러 도메인이 섞여 있어 특정 도메인 흐름 파악..
DataBase에 문자열 데이터 저장 시 Data Type의 Length가 지정되어 있다면 Database 또는 Table에 설정된 문자 인코딩으로 전환 된 바이트 배열의 길이 만큼 저장된다. 만약에 컬럼의 Length 보다 전환 된 바이트 배열의 길이가 더 길 경우 저장할 수 없다. 영어는 한 단어가 1byte라 실수하는 경우가 거의 없지만 한글을 사용할 경우 한 단어가 1byte가 아니라 종종 실수를 한다. 한글의 경우 문자 인코딩에 따라 bytes length가 다르다. 한국에서 주로 많이 사용하는 Charset은 UTF-8 과 EUC-KR로 예를 들면 UTF-8은 한 글자당 3byte이고 EUC-KR은 2byte 이다. public String subByteToStringNoCutting(Stri..
쇼피파이 앱 스토어 결제 앱 개발 작업을 진행하면서 서버 측 MTLS(상호 인증) 환경을 구성하게 되었다. 내가 작업한 서버 환경은 WEB - WAS 분리 구조였으며 WEB에서 요청 최초 수신하고 특정 확장자 또는 URI Path만 WAS 로 전달하여 처리하도록 했다. 당시 사용한 미들웨어는 WEB 서버 - Apache 2.4.53, WAS 서버 - Wildfly 26 이였다. Client(쇼피파이)와 MTLS를 하기 위해 우리 측 WEB 서버 구성에 변경이 필요했다. 일단 최종적으로 작성된 설정 파일은 아래와 같다. Apache 2.4.53 인증서 설정 파일(httpd-ssl.conf) . . . #특정 End Point 적용 필요할 경우 아래와 LocationMatch 지시어를 통하여 적용 가능하다...
개발 서버에 키바나 설치 및 방화벽 허용 후 개인 PC에서 접근 시도를 했지만 접근이 되지 않았다. 키바나는 최초 설치 및 실행 후 " netstat -tnlp " 명령어를 통하여 네트워크 상태를 확인해보면 키바나가 어떠한 네트워크 상태를 가지고 실행되어 있는지 확인할 수 있다. 키바나의 기본 포트는 5601으로 따로 변경한 사항이 없다면 " netstat -tnlp | grep 5601 "을 통하여 확인할 수 있다. Local Address가 루프백 ip(127.0.0.1:5601)로 설정된다. Local Address가 루프백 ip로 설정되어 있을 경우 외부 접근이 불가능하며 주로 로컬 시스템에서 실행 중인 서비스나 응용 프로그램이 자체 시스템에 연결할 때 사용된다. 외부에서 접근 가능하게 하기위해 ..
Tomcat context.xml의 Resource 태그에 Apache Tomcat JDBC Pool를 설정하여 여러 애플리케이션을 실행할 경우 각각 애플리케이션 마다 DBCP에 설정한 개별적인 Connection Pool을 생성한다. DBCP 설정에 초기 Connection 개수를 5개로 해놓아도 애플리케이션이 3개가 돌아간다면 독립적인 3개의 Connection Pool이 생성되어 DB에는 15개의 Connection이 연결된다. 이는 GlobalNamingResources, ResourceLink를 사용하여 모든 애플리케이션이 공통의 DBCP 설정을 공유하여 같은 Connection Pool을 사용할수 있도록 한다. 설정 방법 : tomcat/server.xml maxIdle="30" maxWait..
리눅스 환경에서 jstat 명령어 활용하여 GC 모니터링을 할 수 있다. GC 모니터링 명령어 jstat -gcutil -h20 00001(pid) 2000 3000 jstat : GC 상태를 모니터링할 수 있는 도구 (JAVA_HOME/bin에 설치되어 있음) gcutil : gcutil에서 수행 pid : Java 프로그램 프로세스 ID (ps -ef | grep java or 서비스명으로 조회 가능) 2000 : Interval (ms 간격) 3000 : count (실행 횟수, 설정하지 않을 경우 계속) 모니터링 항목 S0 Survivor 0 영역 사용량 S1 Survivor 1 영역 사용량 E Eden 영역 사용량 O Old 영역 사용량 M Metaspace 영역 사용량 CCS Compresse..