[Spring] Spring MVC 어노테이션
·
Programming/Spring
우아한테크코스 레벨 2에서 학습한 내용을 정리한 글입니다. 💭 들어가며레벨 2에 들어가면서 Spring에 대해 깊이 있게 학습할 수 있는 시간이 주어졌다. 이전에도 서버를 직접 배포하고 운영해 본 경험은 있었지만, 정작 어노테이션의 역할을 묻는 질문에는 쉽게 대답하지 못했다. 주어진 코드를 이해하지 않고 그대로 사용하기만 했다는 사실을 깨달았다. 그래서 이번 기회에 Spring MVC의 핵심 어노테이션들과 요청 흐름에 대해 정리해보고자 한다. ✅ Annotated ControllersSpring MVC는 어노테이션 기반의 프로그래밍 모델을 제공하여, 개발자가 요청 매핑, 요청 데이터 처리, 예외 처리 등을 어노테이션을 통해 간결하게 구현할 수 있도록 지원한다.이러한 방식에서는 @Controller 또..
[CS] 동기/비동기, 블로킹/논블로킹
·
Programming/CS
우아한테크코스 레벨 2에서 학습한 내용을 정리한 글입니다. 💭 들어가며이번 미션을 진행하면서 처음으로 AtomicLong을 접했다. 왜 AtomicLong을 사용하는지 찾아보니 논블로킹 방식으로 동시성 제어가 가능하기 때문이라고 한다."논블로킹이 뭐지..?" 찾아보니 블로킹(Blocking)과 논블로킹(Non-Blocking)이라는 개념이 있었고, 또 그와 자주 함께 언급되는 개념으로 동기(Synchronous)와 비동기(Asynchronous)도 있었다. 전에도 종종 들어본 키워드들이지만, 제대로 정리해 본 적은 없었던 것 같다. 이번 기회에 헷갈리기 쉬운 이 네 가지 개념들을 정리하고, 각 조합이 실제로 어떻게 동작하는지 이해해보고자 한다. 사실 각각의 개념은 서로 직접적인 비교 대상은 아니다. 그..
[TroubleShooting] 왜 우리는 WebFlux를 선택할 수밖에 없었나
·
TroubleShooting
👀 현재 상황 및 배경 설명우리는 MSA 환경에서 각 서버에서 활용할 수 있는 공통 모듈을 도입하려 했다.각 서버는 공통 모듈(common-module)을 통해 공통 로직을 공유하고 있으며,클라이언트의 요청은 Spring Cloud Gateway를 통해 내부 서비스로 라우팅된다. 🚨 문제 상황초기 개발 당시, 우리는 익숙한 Spring MVC 기반으로 서비스를 구성하고 있었다. 그러나 Spring Cloud Gateway에 인증 필터를 적용하는 과정에서 문제가 발생했다. 가장 핵심적인 인증 필터가 제대로 동작하지 않았던 것이다.특정 토큰을 통해 사용자 정보를 추출해 다른 서버로 전파하려 했지만, 사용자 정보가 null인 상태로도 필터가 그대로 통과되는 현상이 나타났다. 이를 통해 필터 로직 자체가 ..
[Development] MSA 기반 Passport 인증 시스템 도입기
·
Development
Smilegate Dev Camp에서 개발한 내용을 정리한 글입니다. [깃허브] [회고]틀린 내용이나 질문, 더 나은 구조 제안 등이 있을 경우 댓글 달아주시면 감사하겠습니다. 💭 들어가며Passport를 도입하면서 가장 큰 어려움은 레퍼런스가 거의 없었다는 점이었다. 정보가 부족한 만큼, 앞으로 이 기술을 도입하려는 분들께 조금이나마 도움이 되었으면 하는 바람으로 MSA 기반 Passport 인증 시스템 도입기를 정리하고자 한다. 본격적인 내용에 앞서, 꼭 인지하고 읽어주셨으면 하는 부분이 있다. Toss 기술 블로그와 Netflix 기술 블로그에서도 언급했듯이, JWT 발급과 Passport 생성은 원래 하나의 인증 서버에서 모두 처리하는 것이 이상적인 구조다. 그러나 우리 프로젝트에서는 인증 서버..
[회고] 2025 스마일게이트 Dev Camp 기록
·
회고/스마일게이트 Dev Camp
💭 들어가며2024년 12월 말부터 2025년 2월까지 약 두 달간 진행된 스마일게이트 Dev Camp!회고가 꽤 늦어졌네요. 바쁘다는 핑계로 미뤄 두기만 했는데, 이제야 짬을 내어 작성하게 되었습니다. 다행히 틈틈이 기록해 둔 것들이 있어, 그 내용을 바탕으로 회고를 작성하고자 해요. 😄 🏃🏻‍♂️ 함께 했던 사람들올해의 첫 스타트를 함께한 Dev Camp 캠프원들! 처음엔 이렇게까지 돈독해질 줄 몰랐는데, 어느새 정말 가족 같은 분위기가 되었어요. 막내였는데, 참 예쁨을 많이 받았던 것 같습니다. 토론할 때 보면 모두가 정말 열정적이고, 배우려는 의지도 강해서 하나 같이 모두 멋진 사람들만 모였다는 생각이 들었습니다. 그리고 이 캠프를 누구보다도 잘 이끌어 주신 인재영입팀 과장님! 정말....
[우아한테크코스] 레벨 1 기록
·
회고/우아한테크코스
💭 들어가며회고가 꽤 늦었다. 방학 기간 동안 부족했던 체력을 보충하고, 오랜만에 부모님도 뵙고... 사실 놀면서 점점 미뤄온 게 가장 큰 이유다. 😅방학 마지막 날에서야 다시 마음을 가다듬고, 레벨 1에서 배운 것들과 고민했던 부분을 복기하며 회고를 남겨보고자 한다. ✅ 미션 1 - 로또▶ PRStep 1: 로또 Step1 PR 링크Step 2: 로또 Step2 PR 링크 ▶ 학습🔽 키워드MVC테스트 코드Object🔽 블로그 정리[Java] 테스트 코드, JUnit & AssertJ ▶ 고민했던 부분1️⃣ 요구사항도 의심하자프리코스를 진행할 때도 그랬듯, 단순히 요구사항을 완벽히 지키는 것에만 집중했던 것 같다. 로또 미션에서도 Getter 사용을 지양하라는 요구사항이 있었는데, 왜 그런 요..
[Java] 불변 객체, 값 객체
·
Programming/Java
우아한테크코스 레벨 1에서 학습한 내용을 정리한 글입니다. 💭 들어가며블랙잭 미션을 진행하던 중, 배팅 금액처럼 의미가 있는 값을 원시값으로 다루지 말고 Money와 같은 값 객체로 리팩터링해 보라는 리뷰를 받았다. 솔직히 "값 객체"라는 용어는 많이 들어봤지만, "왜 굳이 불변이어야 하지?"라는 의문이 들었고, 해소가 되지 않은 상태에서는 억지로 사용하지 말자고 생각했다. 그러다 이번 미션에서 직접 값 객체를 적용하면서 불변 객체의 장점을 알게 되었고, 이에 대해 좀 더 자세하게 정리해보고자 한다.  ✅ 불변 객체불변 객체란 한 번 생성되면 내부 상태가 절대 바뀌지 않는 객체를 말한다. ▶ 불변 객체의 조건객체의 상태를 변경하는 메서드를 제공하지 않는다.클래스를 확장할 수 없도록 한다.모든 필드는 f..
[Java] Optional
·
Programming/Java
우아한테크코스 레벨 1에서 학습한 내용을 정리한 글입니다. 💭 들어가며장기 미션 리뷰로 Optional 관련 피드백을 받았다. 장기 판에 기물이 없는 경우 null을 반환하게 되면 악명이 자자한 NPE의 위험이 있다고 들어, 이를 방지하고자 Optional을 사용했다. 그런데... Optional 관련 피드백이 마구마구 달렸다. Brain Goetz는 Optional을 만든 의도에 대해, "결과 없음"을 명확하게 표현할 수 있는 방법이 필요한 라이브러리 메서드 반환 유형을 위한 제한된 메커니즘을 제공하는 것이라고 말했다. 하지만 실제로는 사람들이 의도와 다르게 사용하는 경우가 많아 주의할 점이 많다고 한다. (이래서 코틀린을 써야 하는 건가...?)찾아보니 안티패턴이란 안티패턴은 다 내가 쓰고 있던 것..
soeun2537
'분류 전체보기' 카테고리의 글 목록