본문 바로가기

전체 글54

세션 로직 개선기 (feat. 더티 코드) 세션 처리 로직을 개선하는 과정을 담은 글입니다.Version #1session이 필요할 때마다 3줄씩 반복되는 로직 String id = SessionUtils.getLoginDefaultId(session); if(id == null) SessionUtils.getLoginAdminId(session); if(id == null) throw new NotFoundSession(SESSION_NOT_FOUND); 로직이 사용되는 부분 @Transactional(readOnly = true) public void updatePassword(final UserUpdatePasswordRequest request, final HttpSession session) { String encryptBeforePas.. 2024. 9. 29.
HttpMediaTypeNotAcceptableException - No acceptable representation 에러가 발생한 상황을 해결하기 위한 생각의 흐름을 정리한 글입니다. 에러가 발생한 상황은 다음과 같습니다. UserController에서 회원가입 기능을 하고, 로컬 테스트를 하기 위해서 postman을 사용해서 테스트를 하고, 결과를 받은 response가 다음과 같다. 응답 결과로 406 Not Acceptable 오류가 발생했다. 시스템 로그를 확인해보자. 로그의 쿼리문을 먼저 확인해보겠습니다. Postman 요청을 보낸 후, 다음과 같은 쿼리가 나간다. 현재 내가 짠 로직에 맞게 쿼리가 알맞게 나갔는지부터 확인해보자. 쿼리를 각각 분리해보면 select 쿼리와 insert 쿼리로 나뉘어져 있다. 쿼리를 날리는 로직은 대개 UserServcie 클래스에 작성을 해두었다. 쿼리가 사용되는 로직은 다음.. 2024. 9. 28.
🙆🏻‍♂️ DP 너, 정복당해라 [백준 2240번 - 알약 편] 문제70세 박종수 할아버지는 매일 매일 약 반알을 먹는다. 손녀 선영이는 종수 할아버지에게 약이 N개 담긴 병을 선물로 주었다.첫째 날에 종수는 병에서 약 하나를 꺼낸다. 그 다음, 그 약을 반으로 쪼개서 한 조각은 먹고, 다른 조각은 다시 병에 넣는다.다음 날부터 종수는 병에서 약을 하나 꺼낸다. (약은 한 조각 전체 일 수도 있고, 쪼갠 반 조각 일 수도 있다) 반 조각이라면 그 약을 먹고, 아니라면 반을 쪼개서 한 조각을 먹고, 다른 조각은 다시 병에 넣는다.종수는 손녀에게 한 조각을 꺼낸 날에는 W를, 반 조각을 꺼낸 날에는 H 보낸다. 손녀는 할아버지에게 받은 문자를 종이에 기록해 놓는다. 총 2N일이 지나면 길이가 2N인 문자열이 만들어지게 된다. 이때, 가능한 서로 다른 문자열의 개수는 총 .. 2024. 9. 26.
데이터베이스 이상 현상의 원인, 속성 간 종속 데이터베이스 이상현상은 트랜잭션 처리하는 중발생하는 문제로 속성 간 종속이나 데이터의 중복으로 발생한다.도대체,여기서 말하는 속성간 종속이 무엇일까?예시와 함께 알아가보자 🤓속성간 종속데이터베이스 테이블에서 하나의 속성(컬럼)의 값이 다른 속성(컬럼)의 값에 따라 결정되는 관계를 의미한다.쉽게 말해, 하나의 속성이 다른 속성에 의존적인 상태이다. 예시개발자 직군으로 예시를 들어보자.개발자 ID개발자 이름부서 ID부서 이름1박모씨10결제팀2김모씨11회원팀3이모씨10결제팀 위 테이블에서 부서이름은 부서ID에 종속적이다. 즉, 부서ID가 결정되면 자동으로 부서이름이 결정된다.예시로, 부서ID가 10이면 부서이름은 항상 결제팀이여야 한다. 이와 같은 관계를 속성 간 종속이라 한다. 문제점속성 간 종속성이 있으.. 2024. 9. 25.
Objects.equals() vs equals() 두 메서드에 어떤 차이가 존재하는지알아보도록 하겠습니다. Equals()equals() 메서드의 설명과 내부 로직은 다음과 같습니다.  설명Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.해석은 다음과 같습니다.이 문자열을 지정된 개체와 비교합니다. 결과는 인수가 null이 아니며 이 개체와 동일한 문자 시퀀스를 나타내는 문자열 개체인 경우에만 참입니다.  내부 로직 🔎 equals()메소드를 비교하는 대상이 nu.. 2024. 9. 25.
Object.equals() 메서드가 정말 null-safe한가? 오늘의 실험체는 Ojbect.equals() 메서드 입니다.실험 주제는 Object.equals() 메서드가 정말 null-safe한가?입니다.실험 시작합니다.🧐 실험 코드코드는 다음과 같습니다.package equals실험;import java.util.Objects;public class equalsMain { public static void main(String[] args) { String a = null; String b = null; boolean result = Objects.equals(a,b); System.out.println(result); }} 실행 결과코드를 실행한 결과는 다음과 같습니다.  결론Object.equal.. 2024. 9. 25.
equals()메소드를 비교하는 대상이 null인 경우 오늘의 실험체는 equals() 메서드 입니다.실험 주제는 equals()메서드에게 null은 안전한가? 입니다.바로 실험 시작하겠습니다. 🧐 실험 코드코드는 다음과 같습니다.String a = null;String b = "hello";boolean result = a.equals(b);  실행 결과코드를 실행한 결과는 다음과 같습니다. "a가 null이기 때문에 String.equals(Object) 메서드를 호출할 수 없다"라고 오류는 말하고 있습니다. 🔎 왜 NullPointerException 예외가 발생할까?equals()라는 메서드는 Java에서 Object라는 클래스에 정의된 static 메서드이다.null인 상태에서 equals()메서드를 호출하려고 하니, 예외가 발생하게 된다. 결론.. 2024. 9. 25.
🌊 우테코 프로젝트 흡수하기 version 1 [프로젝트명 - 달록] 우아한테크코스 프로젝트 코드 흡수하기 편입니다.이번편은 "달록" 프로젝트입니다.주로 코드를 분석하고 왜 사용하는지에 대해 적어보려고 합니다.Backend만 다루려고 합니다. 출처https://github.com/woowacourse-teams/2022-dallog GitHub - woowacourse-teams/2022-dallog: 달력이 기록을 공유할 때, 달록 🌙달력이 기록을 공유할 때, 달록 🌙. Contribute to woowacourse-teams/2022-dallog development by creating an account on GitHub.github.com 🔎 어떤 프로젝트일까?1차 데모데이https://www.youtube.com/watch?v=CpEPET2jXO4&list.. 2024. 9. 24.
🙆🏻‍♂️ 너, Fetch Join 만능이야? N+1 문제를 해결하기 위한 방법 Fetch Join사용하는 것이 무조건 정답일까? 결론부터 이야기해보자!Fetch Join도 한계점을 가진다.📍 Fetch Join의 한계점🚫 페치 조인을 사용하면 별칭을 줄 수 없다.🚫 컬렉션이 두개 이상인 경우 사용할 수 없다.🚫 컬렉션 페치 조인시 페이징을 사용할 수 없다. 🔎  왜 페치 조인을 사용하면 별칭을 줄 수 없을까?String query = "select u from User u join fetch u.team t where t.name = 'A';  이러한 쿼리문과 같이 별칭을 사용해서 조건을 추가하게 되는 경우, 기존 페치 조인으로 가져올 데이터의 일부가 누락될 수 있다. 🙆🏻‍♂️  좀 더 디테일한 상황 예시(비교) 개발자 A씨는 유저의.. 2024. 9. 24.