반응형

Java 12

jackson objeckMapper List 타입 역직렬화(deserialize) 분석

동일한 값을 반환하는 이름만 다른 getter는 어떻게 deserialize 될까? 자바에서 직렬화, 역직렬화 시, 많이(거의) 사용되는 jackson 라이브러리의 deseialize 처리에 관한 글이다. 예상하지 못한 결과가 발생해서 jackson 라이브러리 코드 구현부를 살펴보았다. 현상 위는 name, itemList 변수가 선언되어 있는 Store 클래스이다. 각 변수에 대한 getter는 lombok으로 정의되어 있다. 알 수 없는 프로퍼티를 무시하는 @JsonIgnoreProperties(ignoreUnknown = true) 어노테이션도 추가되어 있다. 그리고 name을 대문자로 반환하는 getUpperName, itemList를 반환하는 getDiscountedItemList가 정의되어 있..

개발 2023.07.16

자바 벨리데이터(validator)과 리플렉션(reflection)

validator는 null을 검사하지 않고 순서를 보장하지 않는다. 아래 클래스처럼 벨리데이터를 사용하던 중 의문이 든 내용이다. class User { @Size(min = 1, max = 50) @Pattern(regexp = "^[a-zA-Z]$") private String name; @Min(value = 18) private int age; @Min(value = 130) private int tall; public User(String name, int age, int tall) { this.name = name; this.age = age; this.tall = tall; } } - name에 null이 들어와도 에러가 발생하지 않는다. @size, @pattern 동작 안 함 - 클래스..

개발 2023.03.15

WebSocket

WebSocket WebSocket은 단일 TCP 연결을 통해 클라이언트와 서버간에 전이중 양방향 통신(full duplex, 2-way communication) 채널을 설정하는 표준화 된 방법을 제공 HTTP와 다른 TCP 프로토콜이지만 80, 443 포트를 사용하고 기존 방화벽 규칙을 재사용할 수 있도록 HTTP를 통해 작동하도록 설계되었다. 더 자세한 설명은 RFC6455 참고 WebSocket 서버가 웹 서버(e.g. nginx) 뒤에서 실행중인 경우 WebSocket 업그레이드 요청을 WebSocket 서버로 전달하도록 서버를 구성해야한다. 마찬가지로 애플리케이션이 클라우드 환경에서 실행되는 경우 WebSocket 지원과 관련된 클라우드 제공자의 지시사항을 확인해야한다. STOMP Websoc..

개발 2021.02.18

JVM 구조 가볍게 알아보기

JVM은 자바 바이트코드를 실행할 수 있는 주체이다.자바와 다른 언어의 가장 큰 차이점은 컴파일된 코드가 플랫폼 독립적이라는 점이다. 여기저기서 다 쓸수있다는 것.자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트코드라는 특수한 바이너리 형태로 변환한다. 이 바이트코드를 실행하기 위해서는 특수한 가망 머신이 필요한데, JVM이 이 역할을 한다. 이때 JVM이 바이트코드를 어느 플랫폼에서나 동일한 형태로 실핸시키는 것이다. 왜 JVM이 필요한지 잠깐 잔바의 탄생 배경을 통해 알아보자.처음에 자바는 냉장고, 전자레인지 등의 가전제품 제어에 사용할 목적으로 개발 되었었다. 여러가지 가전제품에서 모두 수행되는 언어를 만드는 것이 목적이었던 것이다. 그러나 가전제품 회사들의 무관심으로 주목을 받지 못하다가 19..

개발 2016.04.21

System.out.println에 관한 고찰

자바 개발 시, 가장 먼저 배우는게 바로 System.out.println이다.아마 System.out.prinln("Hello World!")를 안써본 사람은 없을 것이다.그럼에도 불구하고 자바 개발 시 지양해야하는 것중 하나가 바로 System.out.prinln이다.이유는 리소스를 많이 사용하여 성능 부하를 초래하기 때문이다. 대신 log4j 등의 유틸리티를 사용하라고 한다. 궁금하지 않은가. System.out.println이 어떤놈인지, 그리고 얼마나 느린지.먼저 System.out.println의 정체를 살펴보자. 구글링도 좋지만 java doc을 먼저 뒤덕거려 보자.허접한 영어 실력으로 System, out, println을 차례로 따라가면서 살펴보면 아래와 같다. System은 Object..

개발 2016.04.03

자바 for문을 이용하여 Map, Hash 값 꺼내기

자바 for문을 이용하여 Map, Hash 값 꺼내기자주 사용하지는 않고 알고리즘 문제풀거나 디버깅할때 사용함 Map Map을 꺼내는 방법은 아래 3가지 방법이 가장 보편적이다.개인적으로는 1번 방법이 가장 간단하고 직관적인것 같아서 이것만 쓰고있음1234567891011121314151617181920212223Map map = new HashMap();map.put("a", "aaa");map.put("b", "bbb");map.put("c", "ccc"); // 방법1)for ( String key : map.keySet() ) { System.out.println("방법1) key : " + key +" / value : " + map.get(key));}System.out.println("===..

개발 2016.03.28

자바 배열 출력

디버그 시 용이한 자바 배열 출력 방법(출처 : https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html) 단일 배열 Arrays 클래스의 toString 사용.(정확히 말하자만 Object 클래스의 toString이다.) 단일 배열만 가능12345int[] intArray1 = {1,2,3};int[][] intArray2 = {{1,1,1}, {2,2,2}, {3,3}}; System.out.println("1차원 배열 : " + Arrays.toString(intArray1));System.out.println("2차원 배열 : " + Arrays.toString(intArray2));cs 결과121차원 배열 : [1, 2, 3]2차원 배열 ..

개발 2016.03.27

자바 10진수 <-> 2진수, 8진수, 16진수 변환

자바 2진수, 8진수, 16진수 변환 시에는 Integer 클래스 API를 활용하면 편하다.(참고 : https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html) 10진수 -> 2진수, 8진수, 16진수 변환12345678int num = 77;String a2 = Integer.toBinaryString(num); // 10진수 -> 2진수String a8= Integer.toOctalString(num); // 10진수 -> 8진수String a16 = Integer.toHexString(num); // 10진수 -> 16진수 System.out.println("2 진수 : " + a2);System.out.println("8 진수 : " + ..

개발 2016.03.26

자바 Arrays 클래스

Arrays 클래스에 배열에 관련된 유용한 함수들이 많다.아래는 가장 자주 쓰이는 유용한 API들이다.(※ 출처 : https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html) sort배열을 오름차순으로 정렬예)1234567String[] strArray = {"a", "c", "b"};Arrays.sort(strArray);System.out.println(Arrays.toString(strArray)); int[] intArray = {1,3,2};Arrays.sort(intArray);System.out.println(Arrays.toString(intArray)); 결과12[a, b, c][1, 2, 3] equals두개의 배열이 같은지 비교..

개발 2016.03.22

메이븐(Maven) 기본 명령어 및 옵션

기본 명령어 mvn compile - 컴파일 수행 - 컴파일 된 결과는 target/classes에 생성된다. mvn test - 테스트 클래스 실행 - 테스트 코드를 컴파일한 뒤 테스트 코드를 실행한다. - 테스트 클래스들은 target/test-classes 디렉터리에 생성된다. - 테스트 결과 리포트는 target/surefire-reports에 생성된다. mvn package - 컴파일된 결과물을 패키지 파일로 생성 - 컴파일, 테스트, 빌드를 수행하여 패키지 파일을 생성한다. - 프로텍트 이름, 버전, 패키징 옵션에 맞게 파일이 생성된다. - pom에서 아래와 같이 설정하면 결과 파일은 donggov-1.0-SNAPSHOT.war 로 생성된다. donggov 1.0-SNAPSHOT war mvn..

개발 2016.01.23
반응형