일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- programmers
- IntelliJ
- k8s
- builder-pattern
- CKA
- Vue
- dabase
- Spring
- cd
- 알고리즘
- vuejs
- SpringMVC
- Kubernetes
- 프로그래머스
- 뷰
- 해시맵
- ORM
- CI
- 자바
- java
- Di
- docker
- JPA
- map
- superBuilder
- CI/CD
- DevOps
- 코딩테스트연습
- Oracle
- hibernate
- Today
- Total
목록전체 글 (110)
문홍의 공부장
1. 회사야... 예상은 했지만.. 5월 너무 바쁘다.. 저번 프로젝트 때에는 바쁘다는 이유로 일상을 포기했었는데, 당시 삶의 만족도가 너무 떨어지고 건강도 많이 나빠졌어서 이번에는 최대한 나를 잃지 않고 일을 하려고 노력 중이다. 야근을 피할 수는 없지만.. 그래도 꼬박꼬박 운동도 가고.. 아무리 그렇다지만 일정이 너무 슬프다. 2. 나는 지금 여기에 있는걸까 추상화를 고민하고 메서드를 쪼개고 모듈을 분리하고 SOLID 를 생각하고...... 하다가 어느 순간 내가 내 발에 걸리고 있는 기분이다. 어렵다 어려워... 요즘 많이 느끼는 점이, 메타인지에 대한 점이다. 0년(신입) 에는 내가 뭐를 모르는지도 모르고, 경력이 조금 쌓이면 내가 다 알고 있다는 착각에 빠지는데, 거기서 더 넘어가면 내가 모르는..
앞선 @Primary 와 @Qualifier (1) - 기본편 에서, 어노테이션의 기능과 사용법에 대하여 알아보았다. 이 내용을 바탕으로, 최근 실무에 적용하였던 사례를 정리해보고자 한다. 최근 multiple database 를 구성하는 태스크가 있어, 두 개의 데이터베이스 중 하나를 메인 DB 로, 다른 하나를 서브 DB 로 정의하여 환경을 구성하였다. 데이터베이스 스키마에 따라 myBatis 와 JPA 를 분리하여 사용하는 것으로 하였다. 이에 따라 메인 DB 는 myBatis mapper 를 스캔할 수 있도록 하는 설정을 추가하고, 서브 DB 에는 entityManager 에 대한 설정을 추가하였다. 1. 메인 DB 의 DataSource 설정 메인 데이터베이스 커넥션에 @Primary 를 사용하..
빌더 패턴은 객체를 생성할 때 사용하는 패턴으로, 메서드 체이닝 방식으로 객체를 생성하여 코드의 가독성 및 유지보수성을 높이기 위해 흔히 사용된다. 이번 프로젝트에서 빌더 패턴을 자주 사용하면서, 그 내용을 간단히 정리해 보자 한다. 객체를 생성하는 방법 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 어노테이션을 정의하였다. 런타임 시에 어노..