목록Study (113)
일단 씻고 나가자
2023. 06. 12 수요일 - [Effective Java] 동시성으로 일어날 수 있는 문제? Java 및 Spring에서의 해결법과 설명?: 동시성이란 같은 자원에 각기 다른 스레드 및 프로세스가 접근하여 자원이 최신화되기 전에 서로 자원을 갱신하여 올바른 로직을 수행하지 못하는 현상으로, 갱신 손실 문제를 유발한다. Java는 전통적으로 synchronized라는 키워드를 제공한다. 단, 해당 키워드는 성능 문제가 있을 뿐 아니라, 하나의 프로세스 내에서만 동시성을 보장하기에 실무에서의 scale up 된 하나 이상의 서버에서 작동하지 못한다. 또한 Spring에선, sychronized는 메서드 시그니처가 아니기 때문에 Spring의 @Transactional과 함께 사용할 경우 Spring의 ..
2023. 06. 10 월요일 - [Effective Java] Checked/Unchecked Exception 설명? 차이? 주의점?: Checked란 try-catch 등으로 에러 처리를 명시해야 할 Exception, Unchecked란 그러지 않아도 될 Exception이다. Checked에는 주로 IO, SQL Exception이 속하며 Unchecked에는 RuntimeException 및 하위 Exception이 속한다. Error는 시스템적 오류를 뜻한다. 스프링의 기본 방식에 따르면 transaction에 대해Checked는 rollback 하지 않음을, Unchecked는 rollback함을 기본값으로 둔다.다만 이는 Spring의 기본값일 뿐이며, 개발자는 스프링에선 @Transac..

* 핵심에 집중하기 위해 클래스, 메서드 명이나 로직 등 에러와 관련 없는 부분은 italic 과 연한 색 처리 및 모자이크 처리 문제 상황 (에러 본문) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bean 이름' defined in file [클래스 경로]: Unsatisfied dependency expressed through constructor parameter 2; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with ..

문제 상황 (에러 본문)2023-11-28 02:04:42.056 WARN 6956 --- [nio-8080-exec-9] o.http://m.jdbc.message.server.ErrorPacket : Error: 1064-42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'limit 3' at line 1 2023-11-28 02:04:42.057 WARN 6956 --- [nio-8080-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1..

문제 상황 모든 데이터를 거리 순으로 조회하는 과정을 [모든 데이터 불러오기 -> 서비스 로직 내에서 정렬 (Collections.sort())] 방식을 사용하고 있었다. 해당 방식은 [전체 데이터 DB에서 조회 -> 서비스 로직 내에서 또 한 번 전체 조회 후 정렬] 두 번 로직을 타므로 1. 데이터가 많아지면 속도가 기하급수적으로 증가 2. 이후 페이지네이션 구현에서 비효율 발생 3. DB의 빠른 검색 이점을 활용하지 못함 등의 문제가 발생할 수 있다고 판단, JPA를 이용한 로직으로 수정했다. (관련 질문 링크 https://okky.kr/questions/1475504#answer-684912) 해결책 (선요약) JPA의 @Query, nativeQuery를 이용하여 성공적으로 로직을 수정하였다...
2023. 11. 07 화요일 - [Spring] HTTP protocol이란? 형식? : Hyper Text Transfer Protocol. 직역하면 하이퍼 텍스트를 전송하기 위한 규칙이다. 예전엔 하이퍼 텍스트(링크)와 일반 텍스트를 전송하기 위한 규약이었으나, 시대의 발전에 따라 html, 마크업 랭귀지 등을 담았고 이젠 JSON 형태의 데이터를 송수신할 때 사용된다. Request 요청 라인 : HTTP 메서드 / 요청된 url / HTTP 버전 (스펙) ex) GET /api?request=param HTTP/1.1 헤더 : Content-Type (보내는 데이터의 형태) / Accept (받기를 원하는 데이터의 형태) ex) application/json 바디 : 요청할 실제 데이터 Resp..
2023. 11. 01 수요일 - MST와 최단 경로 알고리즘 차이? 종류? : MST는 Minimun Spanning Tree이며, 이때 Spanning Tree는 사이클 없이 모든 정점이 n-1개의 간선으로 연결된 그래프. 최단 경로 알고리즘은 특정 노드에서 다른 특정 노드로 가는 길을 최소의 비용으로 가는 방법을 찾는 것. 둘은 목적이 다르다. MST는 전체적으로 최소의 비용을 고르기에, 최단 경로 알고리즘처럼 특정 노드에서 다른 특정 노드로 가는 최소 비용을 보장하지 않는다. MST는 무향 그래프에서만 동작하며, 최단 경로 알고리즘은 유, 무향 모두 동작한다. MST 1. 크루스칼 – 간선 중심 // 최소 가중치의 간선으로 정렬 후 순서대로 두 노드의 부모를 같게 만들어줌. 2. 프림 – 노드 중..
2023. 10. 31 화요일 - [Spring] Exception을 처리하는 방법? : 스프링에서 예외를 처리하는 방법은 (REST API) 다음과 같다. 만약 Exception을 handle을 해주지 않으면 기본적인 에러 페이지를 발생시키므로, 구체적인 에러의 내용과 처리를 위해 handle은 중요하다. 기본적으로 JSON 형태로 보내는 것이 좋은 이유는, 직렬화의 이점과 요새는 JSON을 해석하는 해석기도 없는 곳이 없으므로 호환이 좋다. ResponseEntity는 스프링에서 제공하는, 응답 시의 방법 중 하나. http status나 header, body를 자유롭게 설정할 수 있다. 따라서 아래의 @ResponseStatus는 ResponseEntity로 대체 가능. 예외 처리의 우선순위는 정..

2023. 10. 30 월요일 - [Effective Java] 메서드 작성 시 주요 사항? (메서드 명, 편의 메서드, 파라미터, boolean) : 메서드 명은 표준 명명규칙을 지키되, 현재 소속되어 있는 그룹의 컨벤션을 지키는 것이 중요하며, 메서드 명이 길어질 경우 심각한 가독성 혼란을 일으킬 수 있으므로 대체하는 방법이 필요하다. (JPA의 경우 Query 어노테이션으로 대체하거나) 편의 메서드(Util, 혹은 클래스 내부에서 활용)는 되도록 사용하지 않는 것이 좋다. 클래스 내에서 많이 사용할 경우 그것은 private 메서드일 확률이 높다. 웬만하면 먼저 메서드 내에 선언하여 활용하고, 필요하다면 분리하자. 파라미터의 경우 개수가 적어야 하고 같은 타입은 지양해야 한다. 그럴 경우 객체로 파..
2023. 10. 26 목요일 - [Effective Java] Date의 문제점? 해결 방법? : Date는 불변 객체가 아니기 때문에 (set으로 원본을 바꿀 수 있음) 문제가 생길 수 있다. LocalDateTime 불변 객체를 사용하거나, 방어적 복사로 원본을 항상 보관해야 한다. 이는 Date뿐 아니라 다른 불변 객체가 아닌 객체를 사용할 때도 방어적 복사를 사용. 수정하지 않을 것이라면 상관없지만, 수정할 것이라면 방어적 복사. - [Spring] controller란? 관련 어노테이션 설명? Controller – 외부의 요청을 처리. 스프링 MVC에는 어노테이션으로 활용. 예전엔 @Controller도 있었는데, 예전에 썼던 어노테이션. 예전엔 프론트-백의 경계가 희미했기에, HTML 템플..