분류 전체보기 273

스프링 고급편 - 쓰레드 로컬 ThreadLocal

✔️ 전 시간 필드 동기화에 대하여매번 파라미터로 TraceId를 넘기는 것은 복잡하고 어렵다. 따라서 LogTrace 인터페이스를 만들고 traceHolder를 만들어서 여기에 traceId를 보관하여 동기화 한다.하지만 동시성 이슈가 발생한다. 결론적으로는 쓰레드 로컬을 사용하면 동시성 이슈도 해결된다.   먼저 TraceId를 파라미터로 넘기지 않고 필드 동기화하는 법이다.public interface LogTrace { TraceStatus begin(String message); void end(TraceStatus status); void exception(TraceStatus status, Exception e);} @Slf4jpublic class FieldLogTrace ..

문제를 풀면서 공부

https://school.programmers.co.kr/learn/courses/30/lessons/151137 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr SELECT *FROM CAR_RENTAL_COMPANY_CARWHERE OPTIONS REGEXP '(시트.*){2,}'GROUP BY CAR_TYPEORDER BY CAR_TYPE;  REGEXP 문자열 패턴을 검색하거나 비교하는 SQL의 연산자() 그룹화로 하나의 문자열로 취급{n} n번 반복{n, }n번 이상 반복.임의 문자+앞의 문자 1번 이상 반복YEAR(), MONTH(),  HOUR(..

SQL 2024.08.18

백준 2644번 : 촌수계산 자바

🧫 문제 분석 ✔️ 출처촌수계 실버 2 📖 문제 bfs는 가중치가 같으면 항상 최단거리이다.그래프는 연결되어있기에 어디에서 시작하든지 가중치가 같다면 거리는 같다. (양방향 한정)BFS는 재귀로 구현하지 못한다. 처음에는 진입 경로가 0인 최상위 부모를 찾아서 위에서부터 DFS 탐색으로 깊이를 측정하며 x와 y를 구했다.부모와의 관계를 문자열로 저장하고 각 각 비교하면서 촌수를 따졌는데 이렇게하면 너무 오래걸리고, 이상하게 중복이 생겼다. 푸는 방향이 잘못되었던 것이다. 이 문제에서 원하는건 그래프와 넓이 탐색에 대한 개념을 잘 이해하는지를 물어보는 문제였고 나는 제대로 이해하지 못했어서 이상하게 풀이를 시작한 것이다.  잘 기억하자.   🔅 문제 풀이import java.io.*;import ja..

HTTP 상태코드

🧫 상태코드클라이언트가 보낸 요청의 처리를 응답에서 알려주는 기능1xx (Informational) : 요청이 수신되어 처리중2xx (Successful) : 요청 정상 처리3xx (Redirection) : 요청을 완료하면 추가 행동이 필요4xx (Client Error) : 클라이언트 오류 , 서버가 요청을 수행할 수 없음5xx (Server Error) : 서버오류, 서버가 정상 요청을 처리하지 못함모르는 상태코드-> 상위 상태코드로 해석해서 처리ex) 234 ? -> 2xx (Successful)로 처리✖️ 1xx -Informational-거의 사용하지 않음✅ 2xx -Successful-200 OK요청 성공201 Created요청 성공해서 새로운 리소스가 생성됨생성된 리소스는 응답의 Loca..

Back-End/HTTP 2024.08.17

HTTP - 메서드

🖊️ API URI 설계리소스 식별 중점✔️ 리소스의 의미회원CRUD를 예로 들어보자회원 등록, 수정, 조회 자체가 리소스는 아니다.회원 이라는 개념 자체가 리소스가 된다.✔️ 리소스 식별방법회원의 CRUD(기능)를 모두 배제하고회원이라는 리소스만 식별 -> 회원 리소스를 URI에 매핑✔️ 계층 구조를 활용회원 목록 조회 /members회원 조회 /members/{memberId}회원 등록 /members/{memberId}...계층 구조상 상위를 컬렉션으로 보고 복수단어 사용 권장그렇다면 어떻게 구분할까?리소스와 행위를 분리 하는 것이다.📬 GET,POST✔️ GET : 리소스 조회리소스 조회서버에 전달하고 싶은 데이터는 query를 통해서 전달지원하지 않는 서버가 많아서 메시지 바디를 허용하지 않..

Back-End/HTTP 2024.08.17

HTTP 기본

💠HTTP?'Hyper Text Transfer Protocol'➡️ HTML같은 리소스 데이터들을 주고받는 프로토콜모든 것 전송 가능HTML,TEXT, 이미지, 음성, 영상,JSON,XML(API) 등일반적으로 알려진 거의 모든 파일을 전송서버 간 데이터 통신에도 대부분 HTTP를 사용TCP : HTTP/1.1, HTTP/2UDP : HTTP/3HTTP/1.1 주로 사용하지만 구글이나 네이버같은 사이트를 보면 HTTP/2, HTTP/3를 많이 사용한다.해당 사이트에서 어떤 프로토콜을 사용하는 지 보는 방법크롬 브라우저를 기준으로 F12를 눌러 NETWORK상태 창에서Protocol을 보면 나온다 .없을시 저 부분을 우클릭하여 프로토콜을 추가만약 아무것도 안나올 시 Filter부분에 뭔가 있는지 확인?..

Back-End/HTTP 2024.08.17

IncorrectResultSetColumnCountException - JdbcTemplate

예외 발생멤버 전체조회 코드를 짜고 테스트했는데IncorrectResultSetColumnCountException 예외가 터졌다예외에서 코드 따라가보니public List findAll() { String sql = "select * from member"; List members = template.queryForList(sql, Member.class); return members;}여기서 문제가 발생했다.queryForList 메서드를 추적해서 가져왔다@Overridepublic List queryForList(String sql, Class elementType) throws DataAccessException { return query(sql, getSingleColumnR..

문제해결 2024.08.17

크롬 개발자도구(f12) network 빈 화면 나오는 현상

스프링으로 실습하다가 f12를 눌러 응답 정보를 보려는데아무것도 안뜨는 현상이 나왔다.원인을 찾다가 두 가지를 발견하였다. Filter에 남아있는 문자Filter에 있는 More filters에 Blocked response cookies 이 두개 때문에 아무것도 안뜨는 거였다.1번은 예전에 체크할 거 있어서 그렇다 치는데2번은 누른 적이 없는데 왜 저게 되어있는지 모르겠다...Filter에 있는 문자 지우고 Bloked response cookies 체크 해제해줬더니 해결됐다.

문제해결 2024.08.17

Lambda & Stream

✔️ lambda(람다)람다식은 메서드로 전달할 수 있는 익명 함수를 단순화한 코드 블록() -> {}() : 파라미터-> : 화살표{} : 실행문람다식은 함수 자체를 전달 인자로 보내거나 변수에 저장하는 것이 가능람다식에서 타입이 예측가능하다면 생략 가능특정 람다식을 사용하여 변수에 담는데 그 변수의 타입은 함수형 인터페이스 타입이다.함수형 인터페이스 : 하나의 추상 메서드를 갖는 인터페이스함수 디스크립터 : 함수형 인터페이스의 추상 메서드 시그니처메소드 시그니쳐 : 메소드의 이름 + 메소드의 파라미터 + 파라미터의 수  함수형 인터페이스함수 디스크립터 기본형 특화 PredicateT -> booleanIntPredicate, LongPredicate, DoublePredicateConsumerT ->..

JAVA 2024.08.17

Optional<T>

✔️ Optional이란 ?Optional은 NullPointException 발생 방지를 위해 사용 Java8Optional는 null 이 올 수 있는 값을 감싸는 Wrapper 클래스  ✔️ null 체크기존에는 if문을 사용해서 null 체크List list = store.get("itemName");if ( list == null) { log.info("없는 상품"); // 처리 }public final class Optional { /** * 빈 optional을 공통객체로서 가지고 있다. */ private static final Optional EMPTY = new Optional(null); /** * null이 아닐 경우 값이 담기고, nul..

JAVA 2024.08.17