분류 전체보기
Java - List의 제네릭 타입이 달라도 오버로딩은 불가하다.
문제 상황 토이 프로젝트 진행 중 인자로 List의 제네릭 타입을 다르게 해서 메서드를 오버로딩하려고 했다. 아래와 같이 코드를 작성하면 이와 같은 컴파일 오류가 발생한다. 'calculatePeriodBy(List)' clashes with 'calculatePeriodBy(List)'; both methods have same erasure public int calculatePeriodBy(List functions) { int totalExpectedTime = functions.stream() .mapToInt(RequiredFunction::getExpectedTime) .sum(); return calculatePeriod(totalExpectedTime); } public int calcu..

JPA - 상속 관계 Single Table 전략에서 DiscriminatorColumn 접근하기
문제 상황 토이 프로젝트 진행 중 상속 관계 매핑을 싱글 테이블 전략으로 진행했다. 아래는 상속 관계에 있는 클래스의 다이어그램이다. 공통 사항은 Study 필드에 있고 자식 클래스들의 세부사항은 각각의 필드에 있다. 이 때 StudyRepository 하나로 기본적인 CRUD작업을 할 경우 해당 행의 타입이 어떤 타입인지 구분하기가 어려웠다. 예를 들어, id값으로 데이터를 조회할 때 해당 row의 타입이 무엇인지 알 수 없기 때문에 데이터를 매핑할 Entity의 타입을 지정할 수 없었다. 물론 요청이 들어올 때 타입을 구분하는 변수를 하나 추가하고 자식 클래스별로 repository를 만들면 해결 할 수도 있다. 하지만 상속 관계 매핑 시 @DiscriminatorColumn을 통해 DB에 생성되는 ..

Java - List vs Map
List vs Map 인프런 강의를 듣던 중 "List로 조회를 하면 성능이 저하될 수 있으니 Map으로 바꾸자"라는 말을 들었다. 사실 별다른 생각 없이 두 컬렉션을 사용해왔다. 키를 통해 값을 조회해야하는 상황에선 Map을 쓰고, 그 외의 상황에선 일반적으로 List를 사용해 왔다. 특정 상황에서 분명 유리한 컬렉션이 있다. 그렇기에 두 컬렉션의 구조적 차이와 성능 차이에 대해 알아보고자 한다. List vs Map(조회 시 성능 차이) 두 컬렉션에서 주로 사용되는 구현체인 ArrayList와 HashMap을 사용해 비교를 해보자 1. 저장 성능 차이 1-1. List - 순차 저장 // ArrayList - 순차 저장 saveListSequentially(1000); saveListSequentia..

서평 - 소프트웨어 장인
직업을 대하는 태도 개발자는 내가 가져왔던 여러 직업들 중 하나다. 그리고 평생 업으로 삼을 듯하다. 그렇기에 직업을 대하는 나의 태도 또한 달라져야만 했다. 이전에 다른 일들을 하며 수동적인 태도를 가지는 문제가 있었다. 삶에 대한 나의 태도 또한 비슷하게 변해갔다. 이 태도는 나의 자존감을 서서히 갉아 먹었고, 삶의 의미를 잃게 만들었다. 나의 문제가 일반적인 성향이라고 볼 수도 있다. 하지만 타인에게도 비슷한 문제가 있다고 나 또한 그래도 괜찮다는 것은 내 가치관과 맞지 않다. 문제를 해결하기 위해(정확히는 현실 도피) 퇴사를 했다. 휴식기를 보내던 중 개발자라는 직업을 알게 됐다. 그동안에 고민했던 내 가치관과 적합하기에 선택했다. 또 개발자라는 직업을 통해 역으로 얻고 싶은 삶의 태도가 있었다...

Spring - Springboot + Vue3 + MariaDB를 카페24에 배포할 때 Tip(주의사항)
카페 24에 호스팅 과정은 어렵지 않으니 다른 블로그를 참고하면 쉽게 할 수 있다. 대신 호스팅 과정 중에 겪은 문제들을 기록하고자 한다. 1. 환경 * 프로젝트 SpringBoot 2.7.14 Vue 3.3.4 JDK 8 * 서버 Tomcat 8.5.x JSP 2.3 Servlet 3.0 JDK 8 MariaDB 10.1.X UTF-8 2. Tip 2.1 403 Forbidden 에러 * 원인 : 보안 인증이 안돼 있는 경우 발생 * 해결방안 : url의 https -> http 로 변경 또는 ssl 인증서 발급 2.2 DB설정 정보가 틀릴 경우 java.sql.SQLInvalidAuthorizationSpecException: (conn=565) Access denied for user * 원인 : ..

Spring - ArgumentResolver
1. ArgumentResolver란? * 요청 매핑 핸들러 어댑터에 넘어온 요청을 객체, 변수로 바인딩 위의 그림은 Http 요청 메시지의 예시다. 사용자의 요청은 Http Method에 따라 다르지만 url에 '?'뒤에 오는 쿼리스트링으로 전달될 수도 있고 위의 예시처럼 body안에 저장돼 전해질 수도 있다. 또는 JSON, XML 등 다양한 형태로 요청 메시지가 서버로 전해진다. 이렇게 다양한 요청 메시지들을 프로그래머가 일일이 설정해주기란 상당히 불편한 일이다. 그래서 Spring에선 ArgumentResolver를 지원해 해당 요청 메시지들을 객체, 변수에 바인딩 해 해결해준다. 2. ArgumentResolver 동작과정 1. 요청에 적합한 Handler(Controller)가 있는 지 조회 ..