Merge 알아보기 git checkout feat/1 git merge develop 1. Fast-Forward 새로운 브랜치 ‘feat/1’가 develop 브랜치로부터 분기된 이후 develop 브랜치에 새로운 커밋이 올라오지 않았다면, ‘feat/1’ 브랜치가 develop 브랜치와 비교했을 때 최신의 브랜치라 할 수 있습니다. Git-flow 방식으로 develop 브랜치에서 새 브랜치로 분기하면서 개발하는 경우 이런 경우 ‘feat/1’의 변경 이력을 그대로 develop으로 합치는 것이 Fast-forward Merge입니다. 2. Recursive (재귀적) ‘feat/1’ 브랜치가 develop 브랜치에서 분기 되고 develop 브랜치에 새로운 커밋이 생겼다면, ‘feat/1’를 최신..
CORS(Cross-Origin Resource Sharing) 란 웹 애플리케이션에서 다른 출처(origin)의 리소스에 접근할 수 있는 규칙을 정의하는 메커니즘입니다. 웹 브라우저는 보안 상의 이유로 스크립트가 동일한 출처에서 실행될 때만 리소스에 접근을 허용합니다. 그러나 이로 인해 다른 출처의 리소스에 접근하는 요청이 차단되는 문제가 발생할 수 있습니다. 이를 해결하기 위해 CORS가 도입되었습니다. 개발하면서 마주치는 CORS 에러 분석하기 Warning! Access to fetch at ‘https://myhompage.com’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: No ‘Access-Control-Allo..
웹 소켓 vs HTTP 양방향 통신을 가능하게 하는 통신 프로토콜입니다. HTTP 프로토콜의 한계를 극복하기 위해 등장했으며, 기존에도 자주 사용되는 HTTP 프로토콜은 클라리언트에서 서버로 요청을 보내고 서버는 그에 대한 응답을 보내는 단방향 통신 방식입니다. HTTP 방식은 실시간 통신이나 푸시 알림 등 양방향 통신에는 적합하지 않아, Socket을 사용하여 처리합니다. 주로 서버가 클라이언트에게 비동기 메시지를 보낼 때 널리 사용하는 기술입니다. 웹 소켓 연결은 처음에는 HTTP 연결이지만, 특정 핸드셰이크 절차를 거쳐 웹 소켓 연결로 업그레이드 됩니다. 웹 소켓의 특징 ✔️ 양방향 통신 간단히, 데이터 송수신을 동시에 할 수 있는 방법입니다. 일반 HTTP 통신은 Client가 요청을 보내는 경우..
Spring의 HandlerInterceptor 구현을 통해 사용자 요청을 가로채어 처리할 수 있는 인터셉터입니다. 이 인터셉터는 특정 핸들러 메서드에 커스텀 어노테이션이 붙어 있을 경우, 해당 요청이 유효한지 검증합니다. 저는 HandlerInterceptor를 통해 인증된 사용자의 권한과 특정 조건을 검사하기 위해 사용했습니다. 로그인한 사용자가 게시글의 작성자인지 확인이 필요한 경우 서비스를 사용하다 보면 로그인 없이 접근 가능한 페이지(홈 페이지 등)가 있고, 로그인을 하거나 추가 권한이 있는 경우에만 접근이 가능한 페이지(게시글 수정, 삭제, 마이페이지)가 존재합니다. 1. 커스텀 어노테이션 만들기 /** * @CheckCombinationOwner : 현재 사용자가 게시글을 작성한 사용자인지 ..
스프링부트를 통해 프로젝트를 진행하면 "Custom Annotation"을 통해 간편하게 로그인한 사용자의 정보를 불러올 수 있습니다. Controller의 메서드는 사용자의 HTTP, HTTPS 요청을 Serivce에 전달하는 등 핵심 기능만 담당하고, 현재 로그인이 되어있는 사용자의 정보는 어노테이션을 통해 처리합니다. 로그인된 사용자의 정보 불러오기 HandlerMethodArgumentResolver 인터페이스를 구현한 클래스를 추가하여 컨트롤러에서 파라미터에 값을 바인딩 해줄 수 있습니다. @PathVariable의 원리도 HandlerMethodArgumentHandler에 의해서 처리되는 것입니다. 1. 커스텀 어노테이션 정의하기 import java.lang.annotation.*; @Ta..
SPRING 프레임워크를 통해 객체지향 설계의 원칙 중 SOLID 원칙이 무엇이며, 어떻게 적용되는지 알아보겠습니다. 1. SRP (Single Responsibility Principle) - 단일 책임 원칙 각 클래스는 하나의 단일한 책임만 가져야 한다. Spring에서는 Controller, Service, Repository 등으로 역할을 명확히 나누어 각각의 클래스가 특정 기능 또는 관심사에만 집중하도록 합니다. SRP를 잘 준수했는지 알 수 있는 기준은 변경입니다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따랐다고 할 수 있습니다. // UserController 클래스는 사용자 관리와 관련된 HTTP 요청을 처리하는 책임만을 가져야 합니다. @Controller public ..
Branch 소프트웨어를 개발할 때, 개발자들간에 동일한 소스 코드를 함께 공유하고 서로 다른 작업을 할 때 사용합니다. 1. 브랜치 생성 git branch step1 'step1' 이라는 브랜치가 생성되었지만 ,현재 위치는 아직 main이므로 생성한 브랜치로 이동해야 합니다. 2. 브랜치 이동 git switch step1 main 브랜치에서 step1 브랜치로 이동합니다. 3. 브랜치에서 커밋하기 git commit 4. 브랜치 작업 내역 합치기 (Merge) git switch step1 git merge bugFix git switch bugFix git merge step1 bugFix 브랜치의 위치도 옮겨줍니다. 4.2 브랜치 작업 내역 합치기 (Rebase) git switc..
Prompt 란 프롬프트란 생성 인공지능 분야에서 거대 언어 모델로부터 응답을 생성하기 위한 입력값입니다. Propmt Engineering 이란 거대 언어 모델로부터 높은 품질의 응답을 얻어낼 수 있는 이러한 **프롬프트 입력 값들의 조합을 찾는 작업을 의미합니다. ✅ 프롬프트는 instruction으로 시작하고, context와 instruction을 구분하자. [instruction] 내가 요구하고자 하는 사항이 무엇인지 프롬프트의 제일 첫 부분에 명시하기. ###을 사용해 context를 분리해 보다 AI가 더 잘 인지할 수 있도록 한다. instruction : 모델이 수행하기를 원하는 특정 태스크 또는 지시 사항 context : 모델이 보다 더 나은 답변을 하도록 유도하는 외부 정보 또는 추..