
오늘은 스프링(Spring) 프레임워크의 핵심 원리를 다루어 보려고 한다.스프링은 자바 개발에서 거의 표준처럼 쓰이는 프레임워크이지만, 그 근저에는 매우 중요한 객체 지향 설계 원리가 숨어 있다.특히 다형성, 역할과 구현의 분리, 그리고 SOLID 원칙(OCP, DIP) 등은 스프링을 이해하기 위한 핵심 개념이라 할 수 있다.이 글에서는 초보 개발자도 이해할 수 있도록 차근차근 풀어 쓰고자 한다.자 그럼 스프링 핵심 원리를 이루는 것들을 함께 공부해보자. 객체 지향 설계란 무엇인가?먼저 객체 지향 설계(Object Oriented Design)에 대해 이야기하자.객체 지향 프로그래밍이란 프로그램을 “데이터와 기능을 하나로 묶은 객체” 단위로 설계하고 구현하는 것이다.자동차라는 객체가 있으면, 이 자동차..

오늘은 2022 KAKAO TECH INTERNSHIP 기출 문제를 풀어보려한다. 문제 링크는 다음과 같다. 나는 코틀린으로 문제를 풀었다. 문제를 정리해보자. ✅ 문제 핵심1. 주어진 설문지(survey)와 사용자의 선택(choices)을 통해 성격 유형을 결정하는 문제이다.2. 성격 유형은 4개의 지표로 구분되며, 각 지표마다 두 가지 유형 중 점수가 높은 쪽을 선택한다.3. 설문 항목마다 “비동의” 쪽, “동의” 쪽에 각기 다른 성격 유형이 매핑된다.예) “AN”이면 비동의 시 A, 동의 시 N이 점수를 얻는다.4. 선택지는 총 7단계이며, 4를 기준으로1~3 → 비동의 쪽이 점수 획득5~7 → 동의 쪽이 점수 획득4 → 점수 없음.5. 각 선택지에 따른 점수는 다음과 같다.매우 비동의 / 매우 ..

— InvalidCoordinateException, NotFoundException, CustomException 무엇이 다를까?개발을 하다 보면 필연적으로 예외 처리를 하게 된다.최근 공간 정보 기반 POI 프로젝트를 진행하면서 다양한 예외를 처리해야 했는데,이 과정에서 "도메인별 예외"와 "공통 예외 처리 방식"의 차이를 깊게 이해하게 되었다.이번 포스팅에서는 개별 예외 클래스(InvalidCoordinateException, NotFoundException)와 통합 예외 처리 방식(CustomException 패턴)의 차이를 비교하고, 어떤 상황에서 어떤 스타일이 적합한지 정리해보았다. 💥 문제 상황: 좌표가 잘못 들어왔을 때예를 들어 사용자가 잘못된 위도를 입력한 경우:{ "latitude"..

Kotlin에서 Double 타입은 기본적으로 null이 들어올 수 없지만, JSON → DTO 변환 시 생각보다 큰 함정이 있다. 이번 글에선 Double? + @Field NotNull 조합이 언제 꼭 필요한지 정리해봤다. 🤔 문제의 시작: JSON 필드 누락예를 들어, 아래와 같은 API 요청 DTO가 있다고 하자.data class CreatePoiRequest( val latitude: Double, val longitude: Double) 클라이언트가 아래처럼 요청을 보낸다면?{ "longitude": 126.9769}→ latitude 필드가 빠져 있다. Kotlin primitive 타입(Double)은 절대 null이 안 들어온다.Kotlin에서 Double은 primiti..

“POI 생성 API를 개발하다가 이런 고민이 들었다.생성 후 ID만 반환할까? 아니면 방금 생성한 POI 데이터를 그대로 돌려줄까?상황별로 어떤 방식이 더 적합할지 정리해봤다.”1. 고민의 시작최근 공간 기반 서비스 개발을 하면서, POI(장소) 생성 API를 만들었다.그런데 여기서 고민이 생겼다.옵션 1 → ID만 반환옵션 2 → DTO(엔티티 데이터) 반환두 방식 모두 많이 쓰인다.하지만 상황에 따라 장단점이 분명히 갈린다고 판단했다. 2. ID만 반환하는 방식✅ 예시 @PostMappingfun createPoi(@RequestBody request: CreatePoiRequest): ResponseEntity { val poiId = poiService.createPoi(request) ..

오늘은 2023 KAKAO BLIND RECRUITMENT 기출 문제를 풀어보려한다.문제 링크는 다음과 같다.나는 코틀린으로 문제를 풀었다. 문제를 정리해보자.✅ 문제 핵심개인정보 수집일과 약관 유효기간이 주어진다.모든 달은 28일까지 있다고 가정 → 1개월 = 28일개인정보는 수집일 + 약관 유효기간(월 수)만큼 지난 다음 날부터 파기해야 한다.오늘 날짜(today)가 파기 시작일(= 수집일 + 유효기간)과 같거나 이후라면 해당 개인정보를 파기 대상에 포함시킨다.결과는 파기 대상 개인정보 번호(1번부터 시작)를 오름차순으로 반환한다. ✅ 자료구조 설계terms 정보:"A 6", "B 12"처럼 약관 종류와 유효기간(월)을 문자열 배열로 받음.이를 쉽게 조회하기 위해 Map 으로 변환 (약관 종류 -..

오늘은 2024 카카오 WINTER INTERNSHIP 기출 문제를 풀어보려한다.문제 링크는 다음과 같다.나는 코틀린으로 문제를 풀었다.문제를 정리해보자.✅ 문제 핵심각 친구쌍 A-B에 대해A가 B에게 더 많이 선물 줬으면 → B는 A에게 1개 받는다.같거나 주고받은 기록이 없으면 → 선물지수가 높은 쪽이 1개 받는다.선물지수도 같으면 아무 일도 없다.✅ 자료구조 설계nameToIndex: 이름 → 인덱스 변환 (빠른 조회용)giftMatrix[i][j]: i번 사람이 j번 사람에게 준 선물 수giftGiven[i]: i번 사람이 총 준 선물 수giftReceived[i]: i번 사람이 총 받은 선물 수nextMonthGifts[i]: i번 사람이 다음 달에 받을 선물 수 처음 작성한 코드는 다음과 같다..

도커로 PostgreSQL을 설치하려고 아래의 명령어를 입력했더니 이런 에러가 발생했다.docker run -d \ --name poi-postgres \ -e POSTGRES_USER=poiuser \ -e POSTGRES_PASSWORD=poipass \ -e POSTGRES_DB=poidb \ -p 5432:5432 \ postgis/postgis 에러 메시지:docker: Error response from daemon: no matching manifest for linux/arm64/v8 in the manifest list entries: no match for platform in manifest: not found 내가 사용하는 Mac이 ARM 아키텍처(M1/M2/M3) 기반..

처음 이 문장을 읽었을 때 auto_increment 속성이 설정된 관계형 데이터베이스의 기본 키를 쓰면 되지 않을까?하고 생각했다.하지만 분산 환경에서 이 접근법은 데이터베이스 서버 한 대로는 요구를 감당할 수 없을 뿐더러, 여러 데이터베이스 서버를 쓰는 경우에는 지연시간(delay)를 낮추기가 힘들기 때문에 통하지 않는다는 것을 깨달았다. 역시 대규모 시스템 설계시엔 고려해야할 부분이 많은 것 같다. 요구사항이 다음과 같을 때 ID는 유일해야 한다.ID는 숫자로만 구성되어야 한다.ID는 64비트로 표현될 수 있는 값이어야 한다.ID는 발급 날짜에 따라 정렬 가능해야 한다.초당 10,000개의 ID를 만들 수 있어야 한다.분산 시스템에서 유일성이 보장되는 ID를 만드는 방법들에 대해 알아보자. 1. 다..

네트워크 시스템에서는 클라이언트 또는 서비스가 보내는 트래픽의 처리율을 제어하기 위한 처리율 제한 장치(rate limiter)가 필요한데, 처리율 제한 장치와 처리율 제한 알고리즘에 대해 알아보자. 1. 토큰 버킷 알고리즘 (token bucket)지정된 용량을 갖는 컨테이너이 버킷에는 사전 설정된 양의 토큰이 주기적으로 채워짐. 토큰이 꽉 찬 버킷에는 더 이상의 토큰은 추가되지 않는데, 토큰 공급기가 이 버킷에 매초 2개의 토큰을 추가하고, 버킷이 가득 차면 추가로 공급된 토큰은 버려지는 구조각 요청이 처리될 때마다 하나의 토큰을 사용하고 요청이 도착하면 버킷에 충분한 토큰이 있는지 검사하고, 충분한 토큰이 있는 경우 버킷에서 토큰 하나를 꺼낸 후 요청을 시스템에 전달한다. 충분한 토큰이 없는 경우,..
- Total
- Today
- Yesterday
- hackerrank challenges
- 정보처리산업기사
- Kotlin
- 코드
- 해커랭크 자바 챌린지
- 정보처리산업기사 공부법
- 해커랭크
- ORM
- hackerrank
- JPA
- 풀이
- 강의
- 백준
- 이코테
- 코틀린
- 그리디
- 22 정보처리산업기사
- 챌린지
- 자바
- Java
- 자바의 정석
- Spring Security
- 해커랭크 챌린지
- 정보처리 산업기사
- 소스코드
- challenges
- 알고리즘
- 해커랭크 자바
- 22 정보처리 산업기사
- 디버깅
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |