** 깃허브 md파일에서 가독성이 좀더 좋습니다! computer-deep-dive-study/week2/jeehea/1장_지혜.md at ba55e135bb24c501cbccf68da3e217a996bedaca · jeeheaG/computer-deep-dive-s⛵ 클클 7기 컴퓨터 탐험대. Contribute to jeeheaG/computer-deep-dive-study development by creating an account on GitHub.github.com 궁금했던 점자바는 패키지나 라이브러리를 언제 어떻게 불러올까 60pJVM 의 클래스 로드 과정 : 클래스 로딩 → 링크 → 초기화찾는 클래스가 없으면 ClassNotFoundException 발생JVM의 클래스 로딩 방식impo..
전체 글
삼시세끼 잔잔하게 개발하는 백엔드 지망생 수련기 : Spring boot, Algorithm정리4장 자바가 확장한 객체지향abstract추상 클래스추상 메서드 : 상위 클래스가 구체적인 기능을 구현할 수 없으나 그 기능을 구현(오버라이딩) 및 접근할 수 있도록 강제하고 싶을 때생성자자바 컴파일러는 생성자가 없으면 기본생성자가 자동으로 생성된다생성자 = 객체 생성자 메서드초기화 블록static 블록 : 해당 클래스가 사용되는 시점에 클래스가 static 영역에 로드되면서 실행됨클래스가 메모리 영역에 로드되는 시점은 프로그램 실행 시가 아니라 해당 클래스를 처음 사용하는 시점임. 메모리 사용을 최대한 늦추어 효율을 높이기 위함인스턴스 블록 : 인스턴스 생성 시 실행. 거의 안쓰임finalfinal 클래스 : 상속 불가final 변수 : 상수. 초기화 이후 재할당 불가final 메서드 : 오버라이딩..
알게된 내용Mutabe과 ImmutableImmutable : 생성 후 그 상태가 변하지 않는 객체e.g. String, Integer, Float, Long값이 수정되면 아예 새로운 값이 생성되고 참조값이 새 주소로 바뀜값 수정 후 identityHashCode()로 해시코드를 출력해보면 다름 → 다른 객체임멀티스레드 환경에서도 안전. 해시키로 사용 가능Mutable : 생성 후에도 상태를 변경할 수 있는 객체e.g. ArrayList, HashMap, StringBuilder, Date변경이 많을 시 메모리 성능 상의 이점이 있음변수명 앞에 a나 the 를 붙이는 경우동일한 이름의 클래스가 존재하고, 클래스의 인스턴스를 만들고 싶을 때,e.g. Bird 의 인스턴스 aBirda 나 the 를 붙여서 ..
더 얻은 내용call by ~ 들 정리해보기자바는 참조값을 복사 전달하므로 배열이든 List든(원시타입이든 객체든) 원본이 변경됨자바는 포인터를 사용하지 않아서 메모리 안전성이 높음만약 자바도 포인터로 메모리를 조작할 수 있었다면, GC 처리된 자원에 대해 바뀌거나 사라진 메모리 주소를 바라볼 수도 있음. 그래서 포인터를 사용하지 않을 수도.포인터에 대한 압박 → 개발 생산성 저하 → Java 가 기업단에서 우세하게 된 배경일 수도.C의 댕글링 포인터 : 이미 해제된(free 또는 delete된) 메모리를 계속 가리키고 있는 포인터atomic은 어떻게 atomic 을 보장하는가? 기억에 남는 내용아래 세가지 내용이 자바가 객체지향 언어라는 점을 조금더 실감나게 해줌자바에서 클래스를 떠나 존재할 수 있는 ..

AI 기반 배송 소요시간 예측 물류 시스템을 설계했습니다.프로젝트명 : RUSH LogisticAI를 기반으로 예측한 배송 소요시간을 활용하는 물류 시스템입니다.아키텍쳐 : MSA (MicroService Architecture)기술 스택 : Spring cloud, Eureka, PostgreSql, Redis, Docker+ Zipkin, Gemini api, NaverMap api API 명세서노션으로 작성하였습니다. 아래와 같은 엔드포인트들을 설계하였고, 자세한 내용은 링크의 노션 페이지를 참고 부탁드립니다.-> API 명세서 노션 ERD 및 테이블 명세서ERD 는 ERD cloud 를 활용하였습니다.이를 바탕으로 테이블 명세서를 작성하였고, 링크 참고 부탁드립니다.-> 테이블 명세서 인프라..
9. 분산 추적 (Spring Cloud Sleuth) 및 로깅 (Zipkin)9.1 분산 추적9.1.1 분산 추적이란?분산 시스템에서 서비스 간의 요청 흐름을 추적하고 모니터링하는 방법각 서비스의 호출 관계와 성능을 시각화하여 문제를 진단하고 해결할 수 있도록 도움주요 개념: 트레이스(Trace), 스팬(Span), 컨텍스트(Context)트레이스(Trace) : 트레이스는 하나의 요청이 시작부터 끝까지 각 서비스를 거치는 전체 흐름스팬(Span) : 스팬은 분산 추적에서 가장 작은 단위로, 특정 서비스 내에서의 개별 작업 또는 요청컨텍스트(Context) : 컨텍스트는 요청이 서비스 간에 전달될 때 함께 전파되어, 각 서비스가 요청의 전체 흐름에 대한 정보를 가질 수 있게 함9.1.2 왜 분산 추적이..
5. 서킷 브레이커 (Resilience4j)5.1.1 서킷 브레이커란?서킷 브레이커는 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리하고, 시스템의 다른 부분에 영향을 주지 않도록 합니다.상태 변화: 클로즈드 -> 오픈 -> 하프-오픈5.2.2 Resilience4j의 주요 특징서킷 브레이커 상태: 클로즈드, 오픈, 하프-오픈 상태를 통해 호출 실패를 관리클로즈드(Closed):기본 상태로, 모든 요청을 통과호출이 실패하면 실패 카운터가 증가, 실패율이 설정된 임계값(예: 50%)을 초과하면 오픈 상태로 전환예시: 최근 5번의 호출 중 3번이 실패하여 실패율이 60%에 도달하면 오픈 상태로 전환오픈(Open):모든..
개요언제?검색 등의 요청에서 파라미터가 많음쿼리문을 객체로 다루어 동적으로 생성하고자 할 때 사용→ 쿼리문의 where 조건 변동성이 크고 복잡하여 쿼리문을 객체로 다루어 동적으로 생성하고자 할 때 사용ORM JPA 로 웬만한 건 다 할 수 있지만, JPA 어노테이션으로 네이티브 쿼리로만 관리하기에는 쿼리가 복잡하거나 가독성이 떨어지거나 유지보수가 어려울 경우에 사용 장점sql 실행하지 않아도 컴파일 시 오류 발견 가능메서드로 쿼리 구성 가능유지보수성 알고 가야 할 것, 선택의 이유queryDSL 도 JPA 처럼 내부적으로 EntityManager 기반으로 동작JDBC 템플릿 기준으로 쿼리 생성하는 건 똑같음항상 왜 선택했는가를 말할 줄 알아야함복잡한 쿼리문에 대헤 조금만 쿼리가 길어져도 유지보수가 어려..
에러 메세지인데 이게 중요한 게 아니었음2024-11-12T16:10:25.033+09:00 ERROR 16884 --- [spartaOrderSystem] [ main] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webSecurityConfig' defined in file [C:\\JHPro\\spring_2024\\sparta\\back\\build\\classes\\java\\main\..
음나 통합테스트 안짜봤구나공부 고! JUnit5 쓸 것임 개념@SpringBootTest : 모든 스프링 빈을 로드(스캔&등록)함. application context 를 생성하여 테스트 실행운영환경과 가장 유사한 테스트 가능옵션classes : 해당 클래스만 빈으로 등록(모든 빈 등록x)properties, value : 같은 속성. @Value 에 들어가는환경변수 값 주입webEnvironment : application context 관련 설정MOCK : 기본값. application context 를 생성하지만 mock 환경으로 제공하므로 내장서버(tomcat) 실행되지 않음RANDOM_PORT : 실제 서블릿환경 제공. application context 생성. 내장서버 실행. 사용되지 않는 ..
[백준] 1074 Z | Gol5 | 분할정복(divide and conquer) Pythonhttps://www.acmicpc.net/problem/1074 접근사분할 하면서 좌표 위치에 따라 순서를 더해 계산해가면 될 것 같았다유형 : 분할정복[문제해석] 2^N 크기의 정사각형 배열을 Z모양으로 나눠 탐색할 때, 특정 칸을 탐색하는 순서 구하기 Z모양 탐색이란 : 2사분면 > 1사분면 > 3사분면 > 4사분면 순 [구상] 4x4. N=2 4x4/4 = 4 가 제일 큰 사각형 크기. 현재 탐색중인 면 크기 = S 이 중에 누구? r,c 값이 S / 2 보다 큰가?작은가? 그 안에서 다시 2^N/2 /2 0 1 2 3 0 | 0 1 4 5 1 | 2 3 6 7 2 | 8 9 ..
발단pk로 auto increment 된 정수형을 쓰느냐 UUID를 쓰느냐 둘다 쓰느냐의 이야기를 하다가CUID 라는 걸 알게 되었다.최근에 TSID 도 쓰게 되어서 유니크한 값에 사용되는 자료형들에 대해 짧게 적어보려는 글의 시작(+UUID version,GUID, TSID 와의 비교까지 해보면..좋을 듯?) CUIDhttps://github.com/paralleldrive/cuid2 GitHub - paralleldrive/cuid2: Next generation guids. Secure, collision-resistant ids optimized for horizontal scaling and perforNext generation guids. Secure, collision-resistant i..
배경websocket 에서의 사용자 인증로직을 구현하다가사용자 정보를 세션으로 관리하는 과정에서ws 연결되어있는 사용자가 http 요청을 보내면 세션이 어떻게 되는 거지? 라는 생각이 들었다분리되어 관리된다는 말을 봤는데 진짜인지 궁금해서 테스트해봤다. 시나리오회원가입ws 연결 맺고 세션에 사용자 정보 저장하기ws 연결 맺은 클라이언트가 http 요청 보내고,http 요청 시 세션 정보(세션 id, 사용자 정보) 로그로 출력해보기예상안1 : ws와 http 세션이 따로 관리되어 세션id가 다르고 사용자 정보가 확인되지 않음예상안2 : 같은 클라이언트로 인식해서 ws연결에서 세션에 저장된 사용자 정보가 출력됨 츄라이~ 결과1. 소켓 연결 전 http 요청으로 확인한 session id : 7491B3D4C..
[백준] 5430 AC | deque, 구현 | Gol5 Pythonhttps://www.acmicpc.net/problem/5430 접근유형 : deque, 구현 [문제 해석] 주어진 문자열에 주어진 연산을 수행한 결과를 출력양쪽에서 제거가 일어나야 하므로 데크deque 사용시간제한이 넉넉하지는 않은 것 같아서뒤집기 연산 시 문자열을 실제로 뒤집지 않고 현재 앞방향을 표시해두고 그에따라 처리하는 방향으로 풀어보겠음시간 제한 : 1초 트러블 슈팅입력을 깔끔하지 않게 주는 경우를 많이 겪어보지 못해서아래 경우들 처리에 좀 시간이 걸렸다. 알아두자~앞뒤의 특정 문자 제거하고 입력받기 : string = input().strip(”\n그리고제거할문자들”)** input()은 마지막에 \n가 같이 들어오므로 s..
[백준] 2696 치즈 | BFS | Gol5 Pythonhttps://www.acmicpc.net/problem/2636 접근유형 : bfs [문제 해석] 치즈의 공기에 노출된 부분이 한시간에 한칸씩 녹을때, 마지막에 녹은 치즈 칸수와 다 녹기까지 걸린 시간은?-> BFS로 공기를 상하좌우 인접한 것만 탐색해나가면 치즈 속 구멍을 공기로 인식하지 않도록 처리가 가능해짐! 구상 1. 전체 치즈 개수 적어둠 2. BFS 돌며 공기랑 인접한(이번에 녹을) 치즈 위치 적어둠 3. 녹임. 녹은 치즈 개수를 전체 치즈 개수에서 빼서 남은 치즈 개수 계산해둠 4. 다 녹을 때까지 반복 트러블 슈팅구멍이 아닌 공기에 노출된 부분만 세는 방법을 깔끔하게 생각해내지 못했는데,확실히 공기인 부분에서 시작하는 bfs를 ..