GitHub

https://github.com/Choidongjun0830

전체 글 482

우테코 레벨 2까지의 회고

불안 속에 피어난 확신이전의 나학습 방법개념을 공부한 후에 적용하는 것이 나에게 잘맞는 학습 방법이라고 생각했다. 그래서 인터넷 강의나 학교 수업의 정해진 커리큘럼을 따라가기만 하였고, 학습 자료 내용만 이해하면 충분하다고 생각했다. 이해하고 내 것으로 만드는 시간이나 학습 키워드에 대해 더 깊이 고민하는 시간은 가지지 않아 학습했던 키워드를 다시 만났을 때, 내용을 제대로 설명하지 못하는 경우가 많았다. 지금 생각해보면, 학습 후에 제대로 적용해보지 않아 더 깊이 못나아간 것이라는 생각이 든다.대인 관계다른 사람에 대해 궁금한 점이 없었다. 다른 사람이 나에 대해 질문해도, 답만 하고 되묻지 않았다. 첫인상이 차갑고 무섭다는 얘기도 들었다. 그러면서도, 나에 대해 안좋게 생각하는 것이 너무 두려웠고 친..

우테코 2025.06.13

로깅 개선하기

개발 초기에는 로그를 보기 쉽게 여러 줄로 출력했습니다. 각 항목을 줄마다 구분해두면 사람이 읽기에는 편하다고 생각했기 때문입니다. 하지만 리뷰어인 로키의 피드백을 통해 로그는 사람이 아닌 도구가 읽기 쉬워야 한다는 점을 알게 되었고, 이후 로그를 한 줄로 기록하는 방향으로 개선하게 되었습니다. 1. 로그는 왜 한 줄이어야 할까?사람이 아닌 시스템이 로그를 읽는다 처음에는 다음과 같은 식으로 로그를 찍었습니다:[ReservationService.createReservation]요청 사용자 ID: 123요청 날짜: 2025-06-01요청 테마 ID: 7하지만 로그 분석 도구나 CLI 기반 필터링 도구 입장에서는 이 로그는 4줄짜리 로그가 아니라, 4개의 독립적인 이벤트처럼 인식될 수 있습니다. 이는 다음과..

Spring 2025.06.10

데이터베이스에 종속되지 않는 Repository 테스트를 작성할 수는 없을까?

JDBC에서 JPA로 전환하며 느낀 테스트 설계의 고민이 고민은 방탈출 예약 대기 미션으로 넘어오면서 시작되었다.요구사항 중 하나는 기존 JDBC 기반의 구현을 Spring Data JPA로 전환하는 것이었다.전환 이후, 이전에 작성해둔 테스트 코드들이 대거 실패하면서 꽤나 당황스러운 경험을 했다.물론, 테스트를 처음부터 깔끔하게 설계하지 못한 내 책임도 있었겠지만, JdbcTemplate에서 EntityManager로 바뀐 기술 간의 차이 역시 그 원인 중 하나였다.이러한 경험은 나에게 새로운 질문을 던지게 했다:“Spring Data JPA를 쓰는데, Repository 테스트를 굳이 작성해야 할까?” 내가 선택한 방향처음에는 고민이 많았다.하지만 레벨 2 수업 시트에서 @DataJpaTest라는 힌..

우테코 2025.06.04

Spring Bean 등록 방법 비교

Spring Bean이란?Spring에서 IoC 컨테이너(Spring Context, Spring Container)가 관리하는 객체를 Bean이라고 부른다.IoC는 제어의 역전을 이르는 말인데, 개발자가 직접 객체를 생성하고 관리하지 않고, Spring Container가 이 역할을 대신 수행하는 것처럼, 개발자가 관리하던 것을 외부에서 관리해주는다는 것이다.IoC를 통해 가져올 수 있는 장점은,Spring Container (Spring Context)Spring Bean의 생명 주기를 관리하며, 생성된 Spring Bean들에게 추가적인 기능을 제공한다.추가적인 기능?Bean의 생명 주기 관리 또한, IoC와 DI의 원리가 스프링 컨테이너에 적용된다.IoC와 DI의 원리Spring Container..

Spring 2025.05.21

@RequestBody의 동작 원리와 @ModelAttribute

@RequestBody Request 메시지나 Response 메시지에 담기는 Body의 대표적인 데이터 형식은 JSON이다.@RequestBody는 JSON 형식의 데이터를 자바 객체로 변환한다. ```@Controllerpublic class UserController { @PostMapping("/users") @ResponseBody public ResponseEntity createUser(@RequestBody User user) { users.add(user); return ResponseEntity.ok(user); }}//요청 예시{ "name": "홍길동", "age": 30}->위 요청이 들어오면, @RequestBody에 의해 name은 "홍길동", ag..

Spring 2025.04.16

[프로그래머스] Lv2. 서버 증설 횟수

서버 증설 횟수문제 설명당신은 온라인 게임을 운영하고 있습니다. 같은 시간대에 게임을 이용하는 사람이 m명 늘어날 때마다 서버 1대가 추가로 필요합니다. 어느 시간대의 이용자가 m명 미만이라면, 서버 증설이 필요하지 않습니다. 어느 시간대의 이용자가 n x m명 이상 (n + 1) x m명 미만이라면 최소 n대의 증설된 서버가 운영 중이어야 합니다. 한 번 증설한 서버는 k시간 동안 운영하고 그 이후에는 반납합니다. 예를 들어, k = 5 일 때 10시에 증설한 서버는 10 ~ 15시에만 운영됩니다.하루 동안 모든 게임 이용자가 게임을 하기 위해 서버를 최소 몇 번 증설해야 하는지 알고 싶습니다. 같은 시간대에 서버를 x대 증설했다면 해당 시간대의 증설 횟수는 x회입니다.다음은 m = 3, k = 5 일..

Java 2025.04.14

SOLID 원칙

객체지향 프로그래밍이 어렵고, 기준도 잘모르겠어서 우선, SOLID 원칙을 제대로 알아가보려 한다.객체지향 프로그래밍에서 SOLID 원칙을 잘 지키면 깨끗하고, 확장성이 높으며 유지보수성이 높은 코드를 작성할 수 있다.또한, 테스트에도 용이한 코드를 작성할 수 있다.몇주간 객체지향 프로그래밍에 대해 탐구한 결과, 객체지향 프로그래밍의 장점은 재사용할 수 있는 코드, 클래스 간 분명한 역할, 객체 간의 협력으로 구현하는 코드라고 생각한다.객체를 재사용하면서 객체 간의 협력을 구현하면 일관성을 챙길 수 있다. 여기서 말하는 일관성이란, 공통의 목적을 공유할 때, 그것의 구현 방식도 같은 것이다. 일관성없는 코드를 작성했을 때는 하나의 목적을 가지는 여러 정책, 여러 방식에 대해 여러 구현 방식이 나오는 것이..

공부 2025.03.26

우테코에서의 6주차 WIL

[Facts]아스키 코드를 이용해 알파벳 숫자  2. 인터페이스의 default 메서드 -> 그러면 추상 클래스랑 머가 다르지?  [Feelings+Finding] 아스키 코드를 이용해 알파벳 숫자  저는 장기 좌표를 뷰에서 x는 알파벳으로, y를 숫자로 사용합니다. 도메인에서 사용하기 위해서는 x를 숫자로 바꿔주어야 하는데요. 페어가 아스키 코드를 이용해서 뚝딱하고 숫자로 바꾸어주었습니다. 알파벳 -> 숫자 ```int x = charArray[0] - 'a'; ```charArray에는 a1, c8처럼 사용자가 입력한 좌표가 들어있습니다.java에서 char - char는 아스키 값으로 계산해서 저 로직이 가능한 것입니다.그래서 a는 0, b는 1 ..로 나오게 됩니다. 숫자 -> 알파벳 ```S..

우테코 2025.03.25

[프로그래머스] Lv2. 완전범죄

문제 설명A도둑과 B도둑이 팀을 이루어 모든 물건을 훔치려고 합니다. 단, 각 도둑이 물건을 훔칠 때 남기는 흔적이 누적되면 경찰에 붙잡히기 때문에, 두 도둑 중 누구도 경찰에 붙잡히지 않도록 흔적을 최소화해야 합니다.물건을 훔칠 때 조건은 아래와 같습니다.물건 i를 훔칠 때,A도둑이 훔치면 info[i][0]개의 A에 대한 흔적을 남깁니다.B도둑이 훔치면 info[i][1]개의 B에 대한 흔적을 남깁니다.각 물건에 대해 A도둑과 B도둑이 남기는 흔적의 개수는 1 이상 3 이하입니다.경찰에 붙잡히는 조건은 아래와 같습니다.A도둑은 자신이 남긴 흔적의 누적 개수가 n개 이상이면 경찰에 붙잡힙니다.B도둑은 자신이 남긴 흔적의 누적 개수가 m개 이상이면 경찰에 붙잡힙니다.각 물건을 훔칠 때 생기는 흔적에 대한..

우테코에서의 5주차 WIL

[Facts]템플릿 메서드 패턴과 전략 패턴동적 메서드 탐색[Feelings+Finding]템플릿 메서드 패턴과 전략 패턴템플릿 메서드 패턴 (상속 활용)  • 상위 클래스에서 공통 구조(알고리즘)를 정의하고, 하위 클래스에서 세부 동작을 구현하는 패턴.  • Hook 메서드를 활용하면 알고리즘의 흐름을 제어 가능.  • 장점: 코드 중복 제거, 유지보수 용이  • 단점: 부모 클래스 변경 시 영향이 큼 전략 패턴 (합성 활용)  • 알고리즘을 독립적인 Strategy 인터페이스로 분리하고, 필요할 때 동적으로 변경하는 패턴.  • 클라이언트가 원하는 전략을 직접 선택해야 함.  • 장점: 유연성과 확장성 증가, 코드 중복 제거  • 단점: 클라이언트가 각 전략의 차이를 이해해야 함 Dealer와 Pla..

우테코 2025.03.17
728x90