๐ ์ ์ฒด ์นดํ ๊ณ ๋ฆฌ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ (level2, python)
๐ค ํ์ด ์ฝ๋ import copy from collections import deque def bfs(start, tree, n): visited = [False for _ in range(n+1)] queue = deque() queue.append(start) visited[start] = True result = 1 while queue: now = queue.popleft() for next_node in tree[now]: if not visited[next_node]: queue.append(next_node) visited[next_node] = True result += 1 return result def solution(n, wires): answer = n adjust_arr = [[..
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ค์ ์๋ ํฐ ์ ์ฐพ๊ธฐ (level2, python)
๐ค ํ์ด ์ฝ๋ from collections import deque def solution(numbers): answer = [-1 for i in range(len(numbers))] stack = deque() for idx, now in enumerate(numbers): if not stack: stack.append([idx, now]) continue top_idx, top_now = stack[-1] while stack and now > top_now: stack.pop() answer[top_idx] = now if stack: top_idx, top_now = stack[-1] stack.append([idx, now]) return answer ๐ค ๋ฌธ์ ํ์ด ์ฐ์ , ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ณด๋ฉด..
[Spring] API ๊ด๋ฆฌ๋ฅผ ์ํ Swagger ๋์ ํ๊ธฐ (gradle ๊ธฐ์ค)
๋ณธ ๊ธ์, ํ์๊ฐ Swagger๋ฅผ ์ฌ์ฉํ๋ฉด์ ๊ณ์๋์ด ์ฌ์ฉ๋ฒ์ด ์ ๋ฐ์ดํธ ๋ ์์ ์ ๋๋ค. - 2023.03.24 : Tag / Operation / ApiResponses / ApiResponse / Parameter - 2023.03.25 : @ControllerAdvice์์์ ์ฌ์ฉ, @Schema, @Schema์ hidden ์ต์ ๊ณผ ๋ฌธ์ ํด๊ฒฐ ๐ 0. ์๋ก ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ REST API๋ฅผ ์ ๊ฐ๋ฐํ๋ ๊ฒ์ ํ์์ ์์์ ๋๋ค. ์ด๋ ๊ฒ ์ ๋ง๋ API์ ๋ํด ์ ์ ๋ฆฌํ ๋ฌธ์๊ฐ ์๋ค๋ฉด, ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์์, ์ธ์์ธ๊ณ๋ฅผ ๋ฐ๊ฑฐ๋, ์ฌ๋ด API๋ฅผ ํธ์ถํ EndPoint์ ๋ํด ๊ถ๊ธํดํ๋ ๋ค๋ฅธ ๋ฐฑ์๋ ๊ฐ๋ฐ์์๊ฒ ๊ต์ฅํ ์ ํจํ ์์์ผ๋ก ๋จ๊ธธ ์ ์์ต๋๋ค! ํ์ ๋๋, API ๋ฌธ์๋ฅผ ๋ฐ๋ก ์ธ๋ถ ๋ฌธ์๋ก ์..
[TS] JPA error - Specified key was too long; max key length is 1000 bytes
ํ๋ก์ ํธ ๊ฐ๋ฐ ๋์ค, ํ ์ฌ๋๋น ํ๋์ ๊ณ์ ๊ณผ ๋ฉค๋ฒ ์์์ ๊ฐ์ง ์ ์๋๋ก ํ๊ธฐ ์ํด์, unique ํค๋ฅผ ์ค์ ํ๋ ค๊ณ ํ์ต๋๋ค. ๋น์ unique ํค๋ก ์ง์ ํ ๊ฒ์, ์ด๋ฆ๊ณผ tel1, tel2, tel3์ ๊ฐ์ ์ ํ๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก unique ํค๋ฅผ ์ ํํ์ต๋๋ค. ๊ทธ๋ฌ์ ํ๋จ๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. Specified key was too long; max key length is 1000 bytes ์ฐ์ , ๋น์ Java์์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ด๋ฆ๊ณผ tel1, tel2, tel3์ ๋ํด์ String ํ์ ์ผ๋ก ์ค์ ํ๊ณ ์ด๋ ํ ์ ํ์ ๋์ง ์์์ต๋๋ค. JPA์์ spring.jpa.hibernate.ddl-auto=create ์ต์ ์ผ๋ก ์๋์ผ๋ก ํ ์ด๋ธ์ ์์ฑํ ๋ MyISAM ์์ง์ ์ฌ์ฉํ๋ค๋ฉด, ..
[Spring] @Transactional๊ณผ DB Lock์ DeepDive - (1) DB ํธ๋์ญ์ , ์ฌ์ฉ๋ฐฉ๋ฒ, ๊ฒฉ๋ฆฌ์์ค, ์ ํ ๋จ๊ณ ํ์ด๋ณด๊ธฐ
๐ค 0. DB ํธ๋์ญ์ ๋ ์ด์ ์ชผ๊ฐค ์ ์๋ ์ต์ ๋จ์์ ์์ ์ด๋ผ๋ ๊ฐ๋ ์ผ๋ก, commit()์ ํตํด ๋ชจ๋ ์ฑ๊ณตํ๋ ์ง ์๋๋ฉด rollback()์ ํตํด ๋ชจ๋ ์ทจ์๋์ด์ผ ํ๋ ์์ ๋จ์. ํธ๋์ญ์ ์ DB์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํ๋์ ์์ ๋จ์์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ INSERT, UPDATE, DELETE ๋ฑ์ SQL๋ฌธ์ ์คํํ๋ฉด, ์๋์ผ๋ก ํ ๋ผ์ธ๋ง๋ค ํธ๋์ญ์ ์ด ์ ์ฉ๋์ด Commit์ ์คํํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ํธ๋์ญ์ ์ ์์ญ์ ์๋์ผ๋ก ์ค์ ํด, ํ ํธ๋์ญ์ ์์ ์ฌ๋ฌ๊ฐ์ ๋ช ๋ น๋ฌธ์ ๋ฃ๋๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. START TRANSACTION; .... COMMIT; ํธ๋์ญ์ ์ ์ฐ๋ฆฌ๋ง๋ก '๊ฑฐ๋'๋ผ๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, A์ B๊ฐ ๊ฑฐ๋๋ฅผ ํ๋ ๊ฒฝ์ฐ A๊ฐ B์๊ฒ ๋์ ์ ๊ธ ํ์ผ๋, B์๊ฒ ์ฌ์ ์ด ์๊ฒจ ๋ฌผ๊ฑด์ ๋ณด๋ด์ง..
[Spring] @ControllerAdvice์ @ExceptionHandler
๐ค 0. ๊ธฐ์กด์ Exception์ ํธ๋ค๋ง ํ๋ ๋ฐฉ๋ฒ Java Application์ ๊ฐ๋ฐํ๋ฉด์, ๋ง์ Exception์ ๋ง์ฃผํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ Exception์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋๋ถ๋ถ ์์๋ค์ํผ try-catch ๋ฌธ์ด ์์ต๋๋ค. try ๊ตฌ๋ฌธ ๋ด๋ถ์์ Exception์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฌธ์ฅ์ ์คํํ๊ณ , ํด๋น try๋ฌธ์์ ๋ฐ์ํ ์ ์๋ ์ฌ๋ฌ Exception์ ๋ํด ์ฌ๋ฌ๊ฐ์ catch ๋ฌธ์ ๋ถ์ฌ ํธ๋ค๋ง ํ ์ ์์์ต๋๋ค. ๋ฌผ๋ก , Exception์ ํธ๋ค๋งํ๊ธฐ ์ข์ ๋ฐฉ๋ฒ์ด์ง๋ง, SpringBoot์์ ๊ฐ๋ฐํ๋ฉด์ ๋ช ๊ฐ์ง ๋ถํธํ ์ ์ ๋ฐ๊ฒฌํ ์ ์์์ต๋๋ค. ์์ธ ์ฒ๋ฆฌ ๋ก์ง์ ๋ฐ๋ก ๋ถ๋ฆฌํ ์ ์๊ณ , ํญ์ try-catch ๋ธ๋ก์ผ๋ก ๋ฌถ์ด์ ๊ฐ๋ฐํด์ผ ํฉ๋๋ค. ์ ํํ ๋น์ฆ๋์ค ๋ก์ง์ ํ์ ํ๋ ค๋ฉด, ์ด๋ฌ..
[TS] ์๋ก์ด ํ๋ก์ ํธ ์์ฑ ๋ฐ Spring WebFlux ์ ์ฉ ๊ณผ์ ์ค ์๊ธด ํธ๋ฌ๋ธ ์ํ
๐ 1. Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider ์ค๋ฅ > ์ฐธ๊ณ ๊ธ OSX - M1 ๊ฐ๋ฐํ๊ฒฝ ์ค๋ฅ - could not load a native library: netty_resolver_dns_native_macos_aarch_64 ์ง๋๋ฒ ํฌ์คํ ๊ณผ ๋น์ทํ ๋ด์ฉ์ ๋๋ค. OSX - M1 ๊ฐ๋ฐํ๊ฒฝ ์ค๋ฅ - [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch6. #g ์ผ๋ง ์ ์ง๊ธ๋ฐ์ M1๋งฅ๋ถ์์ ๊ฐ๋ฐํ๊ฒฝ์ ์ธํ ํ๋ฉด์ ๊ฒช์ junho85.pe.kr ํ๋ก์ ํธ๋ฅผ ์คํํ์ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋์์ต๋๋ค...
[Effective Java] ์์ฑ์ ๋์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
๋ณธ ๊ธ์ ์ดํํฐ๋ธ ์๋ฐ 3ํ์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ ์ ๋๋ค. ๋์ผํ ๋ด์ฉ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ๐0. ์๋ก ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ์์, public ์์ฑ์์ ๋๋ค. ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋, ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋(static factory method)๋ฅผ ๋ง๋ค์ด ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ๋จ์ํ ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ๊ทธ ์ญํ ์ ์ ๋ถ์ ๋๋ค. ๋ค์์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ์์๋ก, Boolean ๋ํผ ํด๋์ค์ valueOf ๋ฉ์๋์ ๋๋ค. public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } ๊ทธ๋ ๋ค๋ฉด ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ ๋์ ์ฅ์ ์ ๋ฌด์์ผ๊น์? ๐ค 1. ์ ์ ํฉํ ..