반응형
항해플러스 백엔드 7기 수료 후기 및 회고
외부활동/항해플러스2025. 3. 12. 21:58항해플러스 백엔드 7기 수료 후기 및 회고

들어가기에 앞서2024.12.14 ~ 2025.3.1 항해플러스 백엔드 7기 과정을 수료했습니다.10주 동안 어떤 것을 배우고 경험했는지, 과정 중 했던 기술적 고민들과 좋았던 부분들을 돌아보며 마지막으로 이 과정을 추천하고 싶은 분들에 대해 이야기하고자 합니다. 항해플러스 관련 이전 글항해플러스 백엔드 7기를 시작하며...항해 플러스 백엔드 1주차 회고 - TDD항해 플러스 백엔드 2주차 회고 - Clean Architecture항해플러스 3~5주차 회고 돌아보면 짧은 10주,  수료하다!무엇을 했나요?TDD & 메모리 기반 동시성 제어 기본 학습 및 과제 진행 (깃허브 링크)특강 신청 서비스 – 클린 + 레이어드 아키텍처, 동시성 제어, TDD 적용 (깃허브 링크)대규모 트래픽을 고려한 대기열 기반 ..

어느 프로젝트에나 쉽게 적용 가능한 분산락 컴포넌트 개발 (feat. Spring)
개발/ETC2025. 1. 30. 23:41어느 프로젝트에나 쉽게 적용 가능한 분산락 컴포넌트 개발 (feat. Spring)

Intro항해플러스에서 진행중인 프로젝트인 콘서트 예약 서비스를 분산환경이라고 가정하고, 기존에 DB 락을 통하여 동시성 제어가 되어있던 부분을 분산락을 통해 제어하도록 리팩토링하고자 하였습니다. 이전에 인프런 강의를 수강하며 가볍게 스프링 프로젝트에 분산락을 적용해봤던 경험은 있었으나, 어디까지나 간단하게 "적용만" 해봤던 터라 프로젝트에 어떻게 "잘" 적용할 수 있을지에 대한 고민을 해본 것은 이번이 처음이였습니다. 이에 대하여 컬리 기술블로그의 풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson 글이 많이 도움이 되었는데, 해당 글을 참고하여 다음과 같은 부분들을 고려하고, 좀 더 범용적으로 사용할 수 있도록 수정하여 적용하게 되었습니다. (이해를 위하여 한번 읽어보고..

Spring RestDocs 개선기(2) - 리플렉션을 이용한 Enum 문서 작성 자동화
개발/Spring2025. 1. 29. 22:43Spring RestDocs 개선기(2) - 리플렉션을 이용한 Enum 문서 작성 자동화

이전 글에서 Enum값을 팝업 형태로 띄워 UX를 개선하는 방법에 대하여 소개해드렸는데요, 이번 글에서는 작성에 대한 부분 또한 자동화를 해보겠습니다. 모든 예제 코드는 깃허브에서 확인하실 수 있으며, 여기에서 개선된 문서 체험을 해보실 수 있습니다. 링크 작성 자동화하기잠깐 이전 글에서 작성했던 테스트 코드에서 팝업 링크 문자열을 확인해보면 반복적인 부분이 있기에 따로 유틸 메소드를 만들어 링크가 걸리도록 해주겠습니다. EnumPopupLinkGenerateUtil.ktimport kotlin.reflect.KClassconst val ENUM_DOC_URL = "enums" // Enum Asciidoc 문서 경로fun generateEnumPopupLink(linkText: String, docum..

Spring RestDocs 개선기(1) - 커스텀 스니펫적용 + Enum 값 확인 UX 개선
개발/Spring2025. 1. 29. 19:00Spring RestDocs 개선기(1) - 커스텀 스니펫적용 + Enum 값 확인 UX 개선

Intro이전에 Spring RestDocs를 처음 사용하시는 분들을 위하여 Spring Rest Docs 예제 코드로 학습하기 라는 포스팅을 작성했습니다. 회사에서도 도입 이후 꽤나 만족하면서 잘 사용하고 있었지만, 아래와 같은 몇가지 불편한 부분이 있었습니다. 1. 기본 스니펫 템플릿 사용 시 필수 여부에 대하여 작성하기 힘들다.2. Enum에 대한 값을 수동으로 작성해주어야 한다.3. Enum의 값이 많을 경우 문서 상 설명 란이 너무 길어진다. 위 불편사항에 대하여 우아한 형제들 기술블로그의 Spring REST Docs에 날개를... (feat: Popup) 글을 참고하여 기존의 불편사항을 개선하고 실제로 적용한 내용을 예제와 함께 1편과 2편으로 나누어서 소개해드리려고 합니다. 모든 예제 코드..

외부활동/항해플러스2025. 1. 17. 09:21항해플러스 3~5주차 회고

1. 이전 글  - 항해플러스 백엔드 7기를 시작하며...- 항해 플러스 백엔드 1주차 회고 - TDD- 항해 플러스 백엔드 2주차 회고 - Clean Architecture  2. 진행 내용3~5주차에서는 새로운 기술, 성능 보다는 최대한 간단한 기술만을 이용하여 아래의 가치를 중점적으로 서버 애플리케이션을 개발 완료하는 것을 목표로 하였다.기능의 동작: 성능보다는 주어진 요구사항에 맞게 기능이 올바르게 작동하도록 집중.테스트 코드의 견고함: 유지보수성과 안정성을 고려한 테스트 코드 작성.아키텍처 설계: 클린 아키텍처와 모듈화를 중점적으로 학습 및 적용. 3주차:프로젝트 초기 설계 진행마일스톤, 시퀀스 다이어그램, ERD 작성을 통해 요구사항을 명확히 정의.4주차:요구사항에 맞게 설계대로 서버 애플리케..

EC2 스왑메모리 설정 방법
개발/DevOps2025. 1. 13. 01:25EC2 스왑메모리 설정 방법

EC2 스펙이 매우 낮은 경우 가끔 빌드를 하거나 테스트를 수행할 때 메모리 부족으로 인하여 EC2가 먹통이 되는 현상이 자주 일어나는데, 이럴 땐 스왑 메모리 설정을 해주어 사용할 수 있는 메모리를 늘려줄 수 있다. 개인적으로는 사이드 프로젝트를 배포할 때 EC2 인스턴스를 생성하고 필수적으로 해주는 설정이다. 스왑메모리란?스왑메모리는 컴퓨터 시스템에서 물리적인 RAM이 부족할 때, 디스크의 일부를 임시 메모리 공간으로 사용하는 기능을 말한다.주로 운영 체제의 가상 메모리 관리에서 중요한 역할을 한다. - 스왑 메모리는 RAM이 부족할 경우 동작한다. 시스템이 실행 중인 프로그램이나 프로세스가 사용할 수 있는 물리적인 RAM이 부족하면, 덜 자주 사용되는 데이터를 디스크의 스왑 공간으로 옮긴다. 이렇게..

항해 플러스 백엔드 2주차 회고 - Clean Architecture
외부활동/항해플러스2024. 12. 30. 01:23항해 플러스 백엔드 2주차 회고 - Clean Architecture

1. 이전 글- 항해플러스 백엔드 7기를 시작하며...- 항해 플러스 백엔드 1주차 회고 - TDD 2. 진행 내용클린 아키텍처를 적용한 특강 신청 어플리케이션 개발 2-1. 클린 아키텍처이번 주에 진행했던 클린 아키텍처는 항해플러스를 시작하기 전 가장 기대되었던 주제 중 하나였다. 개발을 하다 보면 아키텍처에 대한 고민은 필수적으로 따라오지만, 아키텍처라는 것이 정답이 없다는 점이 항상 어렵게 느껴졌다. 구글링을 하거나 책을 읽거나, 심지어 컨퍼런스 영상을 보더라도 각자의 상황에 따라 구조가 다르기 때문에 레퍼런스를 단순히 따라 할 수는 없었다.2주차 발제로는 레이어드 아키텍처, 헥사고날 아키텍처, 클린 아키텍처에 대해서 간략한 개념과 장/단점에 대해서 설명해주셨고, 과제로는 실무에서 보편적으로 많이 ..

항해 플러스 백엔드 1주차 회고 - TDD
외부활동/항해플러스2024. 12. 22. 19:15항해 플러스 백엔드 1주차 회고 - TDD

1. 이전 글- 항해플러스 백엔드 7기를 시작하며... 2. 진행 내용1주차에 진행했던 것들을 크게 3가지로 나누면 아래와 같다.요구사항 분석TDD동시성 제어 분석 보고서 작성 2-1. 요구사항 분석1주차 발제를 담당하신 허재 코치님은 요구사항을 뾰족하게 분석하는 것이 중요하다고 했다. 개발에 들어가기 전 요구사항을 분석해야 한다는 것은 알겠는데, 대체 "뾰족하게" 분석한다는 것은 뭘까? 멘토님 왈 뾰족한 요구사항 분석이란, 비판적으로 집요하게 파고들어 요구사항을 분석하는 것이라고 했다. 1주차 발제 자료에 있던 요구사항을 살펴보자.PATCH /point/{id}/charge : 포인트를 충전한다.PATCH /point/{id}/use : 포인트를 사용한다.GET /point/{id} : 포인트를 조회한..

항해플러스 백엔드 7기를 시작하며...
외부활동/항해플러스2024. 12. 20. 20:35항해플러스 백엔드 7기를 시작하며...

항해 플러스10주 후 무엇이든 해내는 개발자로hanghae99.spartacodingclub.kr 지금까지의 회고비전공자로 시작하여 주변에 비교할 개발자가 많이 없었기에 취업준비를 할 땐 내가 공부했던 것을 업무에 잘 녹여낼 수 있을지에 대한 걱정이 참 많았다. 그 당시 실무 개발자에 대한 내 생각은 마이크로 서비스 아키텍처는 기본으로 구현할 줄 알고, 테스트는 기본으로 작성하며 인프라와 데이터베이스에 대한 전문지식까지 겸비한 괴물들만 실무 개발을 할 수 있다고 느껴졌다.  그렇게 실무에 대한 막연한 두려움 속에 작년 11월 스타트업에 백엔드 개발자로 입사하여 커리어를 시작하게 되었고, 내 생각과는 다른 점이 참 많았다.바쁘게 기능들을 배포해야 하다보니 미처 테스트 코드를 작성할 시간도 없을 뿐더러 심지..

Mysql DATETIME vs TIMESTAMP 차이 정리
개발/Mysql2024. 11. 17. 04:53Mysql DATETIME vs TIMESTAMP 차이 정리

Mysql에서 날짜와 시간을 저장할 때 자주 사용되는 데이터 타입인 DATETIME과 TIMSTAMP는 비슷해 보이지만, 중요한 차이점을 가지고 있습니다. 이 글에서는 두 데이터 타입의 차이점에 대해서 알아보고, 간단하게 실습을 해보겠습니다.실습에 사용된 Mysql 버전은 9.1.0입니다.  차이점DATETIME : 날짜와 시간을 YYYY-MM-DD HH:MM:SS 형식으로 저장하는 데이터 타입입니다.- 시간대(Timezone)에 영향을 받지 않습니다.- 저장 범위: 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 TIMESTAMP: Unix Epoch Time(1970년 1월 1일 00:00:01 UTC) 이후의 초 단위로 저장합니다.- 시간대(TimeZone)에 영향을 받습..

Java 리플렉션 정리
개발/Java2024. 11. 15. 01:48Java 리플렉션 정리

안녕하세요 ! 오늘은 Java에서 제공하는 강력한 기능 중 하나인 리플렉션에 대해서 알아보겠습니다.예제에 쓰인 모든 코드는 깃허브 에서 확인하실 수 있습니다. 리플렉션이란?리플렉션이란, 런타임에 클래스와 인터페이스 등을 검사하고 조작할 수 있는 기능입니다.  리플렉션을 이해하기위해서 먼저 JVM의 동작 방식에 대해 살펴볼 필요가 있습니다.1. Java 컴파일러(javac)가 소스코드를 바이트 코드(.class)로 변환합니다.2. 컴파일된 바이트 코드를 클래스 로더에게 전달합니다.3. 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 링크하여 런타임 데이터 영역에 올립니다. 여기서 Method Area의 클래스 정보들을 조작할 수 있는 기능이 바로 리플렉션입니다.  어떻게 Method Area에 접근하는가..

Inner Class를 Bean으로 등록할 수 있는 경우와 없는 경우
개발/Spring2024. 11. 13. 11:37Inner Class를 Bean으로 등록할 수 있는 경우와 없는 경우

Inner Class를 Bean으로 등록할 수 없는 경우public class OuterClass { @Component class InnerClass { }}스프링 프로젝트 내부에 위와 같이 선언한 이너 클래스가 있습니다. 이너 클래스에 @Component를 붙여서 Bean으로 등록하려 하면 과연 Bean으로 등록이 잘 될까요? import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicat..

반응형
image