java
Jackson 직렬화 시 > 기호가 깨질 때 원인과 해결법
Jackson 직렬화 시 > 기호가 깨질 때 원인과 해결법
2025.03.30문제 상황API 응답에서 특수문자가 Unicode escape 형태로 내려오는 현상이 있었다. 예를 들어, > 기호가 \u003E로 바뀌는 경우가 해당된다. 디버깅 시에는 >로 보이지만, 실제 응답에서는 인코딩된 문자처럼 보이는 이유와 해결방법을 정리해보았습니다. 예시public class Product { @JsonProperty("description") private String description = "1 > 0";}디버깅 출력 : 1 > 0 (그대로)JSON 응답 : 1 \u003E 0 원인 분석디버깅 : 단순 문자열 표시라 > 그대로 보임JSON 직렬화 : Jackson 등 직렬화 도구에서 보안 목적으로 이스케이프 처리> 에서 \u003E 로 보임 : , & 등은 XSS 방지 ..
테스트 방법
테스트 방법
2023.03.18JUnit 이란? JUnit은 자바 언어용 단위 테스트 프레임워크입니다. 단위 테스트는 개발자가 자동화된 단위 테스트를 작성하게 도와줍니다. 이를 통해서 코드 품질을 향상시킬 수 있습니다. JUnit은 코드를 리팩토링 하거나 기능을 추가하거나 할때 이전에 작성된 테스트 코드가 작동하는지 확인함으로써 코드 일관성에도 도움을 주게 됩니다. JUnit 특징 사용이 쉽습니다. 개발자가 테스트 케이스를 작성하기 용이합니다. 자동화된 테스트가 가능합니다. 코드 커버리지를 보장할 수 있습니다. 테스트 코드 재사용성이 가능합니다. JUnit은 단위 테스트이기 때문에 독립적으로 실행할 수 있습니다. 그래서 코드를 재사용하기 용이합니다. 테스트 코드 가독성 : JUnit 테스트 결과 쉽게 이해하는데 도움이 됩니다. JUn..
캐시방법
캐시방법
2023.03.11ConcurrentHashMap ConcurrentHashMap은 Thread-Safe 합니다. 동시성 작업에 최적화된 Map 클래스이고, 이 자료구조를 이용해서 캐시를 구현할 수 있습니다. 캐시에서 값을 가져오는 경우 ConcurrentHashMap 에서 해당 키를 사용하여 값을 가져올 수 있습니다. 또, 각 항목에 만료 시간 필드를 추가하여 만료 시간을 추적할 수 있습니다. 만료시간이 5분이라면 아래와 같이 코드를 작성할 수 있습니다. ConcurrentHashMap map = new ConcurrentHashMap(); long expiryTime = System.currentTimeMillis() + (5 * 60 * 1000); // 5분 후 map.put("key1", new MyObject(..
Criteria API
Criteria API
2023.01.28Criteria API란? 자바 ORM 표준 JPA 프로그래밍에서 JPQL(객체지향쿼리) Java Persistence Query Language 을 자바 코드로 작성할 수 있도록 도와주는 빌더 클래스 API를 의미합니다. JPQL 조회를 위한 문자열 빌드에 하나의 대안으로 Java 오브젝트를 갖는 조회 빌드 API 입니다. JPQL은 런타임 중에 잘못된것이 있는지 확인해볼 수 있습니다. Criteria API 장단점 장점 빌더 클래스로 컴파일 단계에서 문법 오류를 확인해볼 수 있습니다. 쿼리문을 문자열 그대로 작성 시 발생할 수 있는 휴먼 에러를 방지할 수 있습니다. 단점 코드가 복잡해지면 가독성이 떨어지게 됩니다. API 사용에 대한 러닝커브가 존재합니다. Criteria API 기본 쿼리 Crite..
의존성 주입
의존성 주입
2023.01.21의존성 주입이 필요한 이유 의존성 주입이 필요한 이유는 객체 간에 결합도를 줄일 수 있기 때문이다. 의존성 주입 방법 스프링에서 의존성 주입(DI)을 위한 4가지 방법을 제공한다. 생성자 주입 Setter 주입 필드 주입 메서드 주입 1. 생성자 주입 생성자를 통해 의존 관계를 주입할 수 있는 방법이다. 이 방법은 생성자 호출시점에서 1번만 호출되는것이 보장된다. 불변인 상태에서 사용할 수 있다. @Component public class quackServiceImpl implements diService { private final QuackRepository quackRepository; @Autowired public quackServiceImpl(QuackRepository quackReposit..
kakao_캐시
kakao_캐시
2021.09.01Cache Size만큼 돌면서 HashMap에 채워 나간다. Hit라면 +5 하한다. Cache 가 가득 차면 하나를 줄인다. import java.util.*; class Solution { public int solution(int cacheSize, String[] cities) { int answer = 0; LinkedHashMap hm = new LinkedHashMap(); if(cacheSize == 0){ return cities.length*5; } int cnt = 1; for(int i=0; i
새로운게임_Java
새로운게임_Java
2021.08.04문제 접근 하기 위해 아래 2가지를 만들어주었다. 1. 말의 상태를 관리하는 class를 생성 => 체스의 상태를 관리해줘야 하는 이유는 체스가 움직이면 맨 밑에 있는지 위치는 어디인지 방향은 어디인지를 명확하게 알기 위함이다. 2. 맵, ArrayList 맵 => 맵은 0,1,2 이렇게 표시만 되는 부분이고 ArrayList 맵은 어떤 체스들이 들어 있는지 보여준다. 예를 들면 다음과 같다. ArrayList_Map[0][0] = { 1,2,3 } 의 의미는 (0,0) 좌표에 체스 1,2,3 이 포진해 있다. 이렇게 해석하면 된다. 3. 우선 main으로 쭉 나열해서 푸는 방법 그리고 재귀적으로 푸는 방법 2가지 모두 시도해보았다. 아무래도 main에다 다 때려박아서 하는게 속도는 더 좋았다. 그치만 ..
Codeforces 풀이를 위한 JAVA 문법 정리-1
Codeforces 풀이를 위한 JAVA 문법 정리-1
2021.06.13시작 Codeforces를 위해 간단히 몇가지 사항들을 정리해봅니다. 1에서 알아볼 건 기본 입출력, 자료형, 반복문, Call By Value ❌ Call By Reference 입니다. 입출력 Java 입출력에는 BufferedReader 버퍼를 이용해서 쓰는 함수를 활용합니다. 이외에도 Scanner를 사용하기도 하지만 속도가 상대적으로 빠르기 때문에 BufferedReader를 사용합니다. 특히, 공식문서에서 입력 스트림에서 문자를 읽을때 효율적으로 읽기 위해 문자를 버퍼에 저장하는것을 권하고 있습니다. 관련해서는 하기 링크를 참조 부탁드립니다. https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html BufferedReader ..
알고리즘 100 :: 백준 순열과 조합(N과M 시리즈)
알고리즘 100 :: 백준 순열과 조합(N과M 시리즈)
2020.09.21ㅡ. N과M(1) : 순열 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 32 33 34 35 36 37 package backjun; import java.io.*; import java.util.*; public class BOJ_15649_N_M_1{ static int[] k; static boolean[] c; public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System...
Module03 :: Java 로 BlockChain 구현해보기.
Module03 :: Java 로 BlockChain 구현해보기.
2020.03.18참고 사이트 https://brunch.co.kr/@springboot/103 를 참고했습니다. 블록체인 이란? 블록체인은 원장 분산 시스템으로 P2P 형식으로 노드와 사슬이 연결되어 있는 방식입니다. 1세대 블록체인 기술백서에서는 합의 알고리즘으로 동작합니다. 블록체인은 decentualize 를 실현하며, 흔히 말하는 DAPP 을 통칭 합니다. 이를 통해 중앙 집권 저장방식에서 분산화된 개인이 데이터를 저장가능합니다. 하지만, 아쉽게도 블록체인 트랜잭션을 개인이 전부 가지고 있기에는 역부족 이기 때문에 아이러니 하게도 거래소와 같은 곳에서 이러한 데이터를 관리하게 됩니다. Hash 정의, 사용 이유 Hash는 일반적으로 암호화가 적용된 SHA-256 을 사용하며, 사용하는 이유는 객체를 구별하기 위해..
Java07 :: Map - keySet(), ContainsKey
Java07 :: Map - keySet(), ContainsKey
2020.02.08오늘 문제를 풀다가 위 두 핵심적인 함수를 몰라서 정리해두려고 합니다. keySet() 은 HashMap 에서 key 를 알 수 있게 도와주는 함수 입니다. ContainsKey('key') = true/false 로 key 값이 있다면 true 그렇지 않다면 false를 return 합니다. 1 2 3 4 5 6 7 8 9 10 map.put('sonic', 1); //map 을 하나 put 받았을 때 for(String key : map.keySet()) String value = map.get(key) //위 for 문을 통해서 value는 실제 sonic 에 담겨져 있는 1의 값을 //key는 sonic 값을 받아 옵니다. Colored by Color Scripter cs
알고리즘38 :: swea_모의시험_벽돌깨기
알고리즘38 :: swea_모의시험_벽돌깨기
2019.11.111 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 12..