전체글 143

[회고] 2024 개발자 회고

2024년은 정말 눈 깜짝할세 흘러가 버린 것 같다.23년 졸업 이후 호주에 다녀와서, 6개월간 부트캠프를 거치고, 4개월 정도 취준을 거쳐1월 4일날 합격 통보를 받고 22일부터 출근한 게 엊그제 같은데, 그 사이 이직도 한 번 했다.암튼 주저리주저리 적어보려고 한다. [ 취업 ] 기존 안드로이드 경력을 가진 상태에서, 백엔드 전환을 위해 부트캠프 수료 후, 4개월 정도 취준을 했다.결과는 애매했다.면접만 한 열군데 넘게는 본 것 같은데, 원하지 않는 곳에선 합격하고가고싶었던 곳은 탈락의 고배를 마시는 경우가 빈번했다.특히 서류 -> 코테 -> 기술면접 -> 임원면접 과정을 거쳐 거진 2달간의 채용 프로세스를 거친 뒤,2차 면접에서 최종탈락을 꽤 했는데, 그럴 때는 멘탈이 많이 아팠다 😂 취준을 더 ..

AWS EC2 프리티어에 깃액션으로 CI/CD 도입기

CICI는 Continuous Integration으로 빌드와 테스트를 자동화하는 과정이다. CDCD는 Continuous deployment로 CI 작업을 끝낸 다음에, 배포 준비가 된 코드를 자동으로 서버에 배포하는 작업이다. 깃허브 액션깃허브에서 제공하는 서비스로, 리포지토리에 특정 이벤트가 발생하면 특정 작업을 반복할 수 있게 해주는 서비스이다.  시작깃허브 액션 CI/CD 스크립트 작성하기- 프로젝트에 /.github/workflows 디렉토리를 만든다. 그 안에 [name].yml 파일을 생성해 스크립트를 작성한다.# 워크플로의 이름 지정name: Build and Deploy# 워크플로가 시작될 조건 지정on: push: branches: [ main ]jobs: build: ..

3-layer-architecture에서의 Command 객체에 대해서

레이어드 아키텍처는 가장 기초적인 제약을 지켜야 한다고 생각한다.가장 기초적인 제약이란 레이어 간 의존 방향은 단방향을 유지해야 한다는 것이다. public User create(UserCreateRequest userCreateRequest) { return userRepository.save(User.from(userCreateRequest)); }위 코드 중 UserCreateRequest는 API(presentation)레이어의 모델이다.API로 들어오는 요청을 Body인 @RequestBody로 매핑하려고 만든 객체인데,하위 레이어인 서비스 컴포넌트로 전달해 서비스에서 이를 사용하고 있다.이는 양방향 의존성이 생겼다는 말이고, 양방향 의존은 순환 참조가 생겼다는 말과 같다..

[AOP] AOP에 대해 혼동하지 말자.

로그인 관련(세션체크) 처리, 권한체크, XSS(Cross site script) 방어, 로깅, 페이지 인코딩 변환 등, 종단이 아닌 횡단으로 관리하고 싶은 요소들이 있다. 이렇듯 횡단으로 공통 부분을 모아서 관리, 조금 어려운 말로 횡단 관심사를 핵심 로직과 분리하여 처리하는 개념이자 방식을 AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)이라고 부른다. 그리고 그 AOP의 하위 범주에 있는것이 Filter, Interceptor, Spring AOP이다.Spring AOP는 Spring 측에서 AOP라는 개념을 어노테이션과 메서드 등으로 구현한 구현체인 것이다. AOP로 구글에 검색해보면 Spring AOP와 AOP를 동일시해서 말하는 포스팅이 많다. 다른 개발자분들이..

6. logback 설정 관련 정리

logback이란?Spring Boot에서 기본적으로 사용하는 로깅 프레임 워크Logback 설정들로 할수 있는 것들로그를 콘솔에 출력만 할지, 파일로 남길지, 네트워크를 통해 외부로 바로 전달할지 등을 결정하기Spring Profile 별로 로그 설정을 다르게 가져가기일정 로그 레벨 이상의 로그들만 남기기로그의 형식 지정하기일정 시간이 지날 때마다, 시간 별로 로그 파일을 정리하거나 로그 파일을 압축해서 보관하기로그레벨이란?Fatal매우 심각한 에러, 프로그램이 종료되는 경우가 많아 거의 사용되지 않음Error의도하지 않은 에러가 발생한 경우, 프로그램이 종료되지 않음Warn에러가 될 수 있는 잠재적 가능성이 있는 경우Info명확한 의도가  있는 정보성 로그, 주로 개발용DebugInfo 레벨보다 더 ..

5. PlantUML로 ERD와 Sequence Diagram을 그린 학습내용 정리하기

사이드 프로젝트를 진행하며 말로만 설명하는것에 대해 한계를 느껴,이런 설계문서를 작성해 두는것도 좋을것 같아서 학습한 내용을 정리해 본다.PlantUML로 ERD와 시퀀스 다이어그램을 만들어보자.  ERD 기본 문법plantUML은 @startuml과 @enduml 사이에 작성한다.테이블은 entity “테이블명” { } 사이에 작성하면 된다. 연관관계 매핑은 다음과 같다.무조건 하나 (1:1)||없거나 한개o|한개 또는 여러개 (1:N)|{없거나 여러개o{  관계선 종류는 다음과 같다.실선 (식별관계) —점선 (비식별관계).. 따라서 우리 프로젝트에 대한 erd를 간단하게 만들어보았다. @startumlentity 유저{ **user_entity** * id [PK] (integer) auto in..

4. React + Spring Boot 이용해서 카카오 로그인 구현기 (공식문서 참조)

https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com 이곳에 나와있는 대로 진행 할 예정이다.근데 공식문서 보고 하면 될거를 자꾸 구글링 해서 블로그 글 참조하게 되고 그러더라.. 다시 마음을 잡고 공식문서 있는거를 토대로 개발해 볼 예정이다.따라해보자. 0. 들어가기 앞서 - 시퀀스 다이어그램카카오 홈페이지에 이렇게 기재되어 있다.하나씩 천천히 해보자 1. Step 1. 인가 코드 받기① Get요청을 하기 위한 Spring Boot 컨트롤러..

3. 내가 @Setter 어노테이션을 싫어하는 이유

들어가며사이드 프로젝트 진행 중, 피어코드리뷰를 진행하며 팀원과 @Setter 어노테이션에 있어 이견 차이가 있었다. 나는 평소에 여러 이유로 @Setter를 쓰는것을 싫어한다. (물론 실무에서도 @Setter를 쓰는 경우를 왕왕 보긴 했다.)그러다 보니 상대방을 설득하려면 논리적으로 나의 생각을 설명해야 하는데, 단편적으로 느끼고 있었던 지식이 파편화 되어있어 말이 잘 안나오더라.. 그래서 그냥 빼애액 우기는 사람의 꼴이 되었다.그래서 좀 반성하며 복습할겸 나름의 이유를 글로 남겨보자 한다. @Setter 어노테이션 이란?이 글을 보고 있는 사람들에게는 의미없는 단락이겠지만.. '왜?' 를 알기 위해서는 '무엇'인지 부터 알아야 하기 때문에.. 간단히 적어보자면,public class Person { ..

2. Live Template을 이용하여 테스트 작성 시 자동완성 작성하기

거두절미하고, 바로 본론으로 넘어가 보자. ctrl + alt + s로 Settings 진입, 위에 Live Template로 검색하여 해당 부분까지 찾아간다.그러면, 아래와 같이 단축어를 셋팅 할 수 있다.그 후, 다음과 같이 입력해 주자. 또한, 밑에 Change 버튼을 눌러 Java로 셋팅해 준다. (눌러보면 무슨 말인지 알 것이다.) 이제 IDE에서 test라고 입력하면, 다음과 같이 이용할 수 있다.생각보다 생산성 향상에 좋으니, 애용하도록 해야겠다.

1. Spring Boot에서 h2 데이터베이스를 사용해보자.

사이드 프로젝트를 진행하던 중, 원래는 매번 설정된 프로젝트에서 시작하느라 몰랐는데, 아무것도 없는 프로젝트에서 다시 쌓아 올리려니 어떻게 해야하는지 알지 못함을 알 수 있었다. 그래서 지금이라도 적어놓고, 나중에 까먹으면 찾아보려 한다. 1. build.gradle에 의존성 추가 dependencies { // h2 runtimeOnly 'com.h2database:h2' }depenencies 부분에 h2 를 추가해 준다.2. application.properties 파일 수정# H2 콘솔 활성화spring.h2.console.enabled=truespring.datasource.driver-class-name=org.h2.Driverspring.datasource.url=jdbc:..