일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 해시맵
- map
- 뷰
- DevOps
- 알고리즘
- docker
- 코딩테스트연습
- CI/CD
- cd
- superBuilder
- ORM
- Vue
- CI
- k8s
- 프로그래머스
- SpringMVC
- 자바
- Oracle
- hibernate
- Di
- java
- vuejs
- builder-pattern
- Spring
- JPA
- IntelliJ
- programmers
- dabase
- CKA
- Kubernetes
- Today
- Total
목록전체 글 (108)
문홍의 공부장
빌더 패턴은 객체를 생성할 때 사용하는 패턴으로, 메서드 체이닝 방식으로 객체를 생성하여 코드의 가독성 및 유지보수성을 높이기 위해 흔히 사용된다. 이번 프로젝트에서 빌더 패턴을 자주 사용하면서, 그 내용을 간단히 정리해 보자 한다. 객체를 생성하는 방법 1. Constructor 생성자 함수를 이용하여 객체를 생성한다. 필수 인자를 받는 필수 생성자와, 선택적 인자를 받는 생성자를 점층적으로 추가한다 모든 선택적 인자를 받는 생성자를 추가한다 생성자 함수를 이용하면, 선택적 인자를 받아 객체를 생성하여야 하는 케이스가 많을 경우, 각기 다른 생성자를 호출하여야 한다. 인자 수가 많아질수록 그 의미를 파악하기 어려워지며, 코드의 가독성이 떨어진다. 또한, 인자가 추가될 경우 코드를 수정하기 어려워진다. ..
프론트 팀원이 보내주고 빵터진 짤 웃김 아니 사실 안웃김 죄송합니다 라고만 말하면 클납니다. (..) 솔직히 말하면 내가 저렇게 생각했다. 여태까지 feature 개발을 주로 하고, 백엔드 프레임워크를 구성하는 일은 항상 시니어 개발자/타 부서에서 담당해 주었기 때문에, CORS 에러라는 걸 고민해본 적이 거의 없었다. 프론트엔드 개발자가 많이 마주하는 에러라고 알고 있었기에 그냥 그런줄만 알고 있었다. 이번에 CORS configure 관련 코드를 세팅해 두었음에도 계속해서 CORS 에러가 발생하는 이슈가 있었고, 내가 CORS 에 대하여 잘 모르고 있다 보니 이 에러가 프론트에서 나는 문제인지, 서버 쪽 문제인지 파악하는데 시간이 걸렸다. (결론적으로 둘다 문제였다)이번 기회에 CORS 에 대해서 공..
1. 하루가 다르게 쌓이는 포스팅 부채 프로젝트 시작 후 한 달.. 그래도 아직은 재밌다! 내가 감당할 수 있는 정도의 챌린징한 일이 거의 매일 생기는데(,,,) 덕분에 하루가 다르게 쌓이는 포스팅 부채들.. 인증서버 구축, 레디스 사용기, shorted URL 생성을 위한 시스템 설계, 스불재 JPA 트러블슈팅 일지, 제 로컬에서는 동작하는데요 이슈 등 .... 하나씩 정리해 나가야지.. 2. 루틴 스픽 으아아... 이거 회고 적다가 4월 마지막날 불꽃 꺼뜨림.. 흑흑 그 전까지 매일같이 채웠었는데요 흑흑 필라테스 재등록했답. 다른 운동을 하고 싶었는데 딱히 이거다 싶은 것도 없고 해서 그냥 일단은 재등록해서 좀 더 다니기로! 개발공부 하루가 다르게 쌓이는 포스팅 부채를 해결하는 것이 요즘의 개발공부...
개발자 원칙을 읽었다. 워낙 핫하던 책이라 한 번 읽어봐야지 생각하고 있었는데, 마침 동네 도서관에 장서가 있어 대여할 수 있었다 ^___^ 공감가는 내용도 많고, 내가 항상 고민하고 있는 내용도 있었다. 또, 그런 고민거리들을 먼저 생각하고 해결해나간 사람들의 이야기를 들을 수 있어 많은 도움이 되었다. 이를 통해 좋은 인사이트를 많이 얻을 수 있었다. 1. 오류를 만날 때가 가장 성장하기 좋을 때다 오류를 만나는 일은 개발자에게 즐겁지 않은 일입니다. 하지만 백엔드 엔지니어로서 저는 "백엔드 엔지니어의 실력은 얼마나 많은 오류와 장애를 만나고 이를 해결했는지 여부에 따라 갈린다" 라고 말합니다. 첫 번째 원칙은, '오류가 발생하면 소스 코드 레벨에서 이해하자' 입니다. 검색하여 해결책을 얻는 것에서 ..
개발을 하다보면, boolean 필드를 사용하는 경우가 자주 있다. 응답 DTO 에 아래와 같이 boolean 필드값을 포함하여 리턴하려고 하는데, json으로 직렬화 하는 과정에서 is 가 빠지고 XXX 형태로 리턴하게 된다. @Getter public class Response { private String name; private int age; private boolean isActive; } { "name": "홍길동", "age": 20, "active": true } 왜 그럴까? lombok 의 @Getter 어노테이션은, primitive boolean 타입 필드에 대하여 getter 메서드를 생성할 때, 접두사로 get이 아닌 is를 사용한다. (boolean isFoo -> getIsF..
Customized AOP 적용하기 Spring AOP 의 개념에 대해 이해하고, 대표적인 AOP 어노테이션인 @Transactional 의 동작 원리에 대하여 살펴 보았다. 개발을 하다 보면 cross-cutting concerns 이 빈번하게 생겨난다. 이런 것들을 하나의 모듈로 만들어 적용 할 수 있도록, AOP 를 통해 Custom Annotation 을 만들어 보자. 1. 어노테이션 정의 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LogExecutionTime { ... } 메서드의 실행 시간을 로깅하기 위해 위와 같이 @LogExecutionTime 어노테이션을 정의하였다. 런타임 시에 어노..
@Transactional의 동작 원리 @Service @RequiredArgsConstructor public class UserService { private final UserRepository userRepository; @Transactional public void save(User user){ userRepository.save(user); } } @Transactional 을 붙이면 일어나는 일 Spring Configuration 에 @EnableTransactionManagement 어노테이션 추가 (Spring boot 에서는 auto configuration 됨) Spring Configuration 에서 Transaction manager 지정 @Transactional 이 붙은 ..
Spring AOP 이해하기 예전에 면접에서 "@Transactional의 동작 원리에 대하여 설명해주세요." 라는 질문을 받은 적이 있다. 당시에 제대로 답변하지 못했고, 이를 계기로 Spring AOP 에 대하여 깊게 이해하려 하지 않았다는 점을 깨달았다. 정리해야지 생각만 하고 미뤄뒀었는데 이번 기회에 개념을 다잡아보고자 한다. AOP (Aspect Oriented Programming) ? AOP(Aspect Oriented Programming; 관점 지향 프로그래밍) 는, 횡단 관심사(cross-cutting concerns) 를 분리함으로써 모듈성을 높이는 것을 목표로 하는 프로그래밍 패러다임이다. 이는 코드 자체를 수정하지 않고, 기존에 존재하는 코드에 동작을 추가하여 수행하는 방식이다. ..