- [ backend/프레임워크 ][spring] REST 구현 (@RestController를 사용하는 이유/ResponseEntity를 사용하는 이유/글로벌 예외 핸들러 정의하기)2024-11-12 09:50:01@Controller 대신 @RestController를 사용하는 이유웹 앱을 만드는 방식에는 크게 두 가지가 있다.백엔드가 완성된 뷰를 제공하는 앱프론트엔드-백엔드 분리 방식의 앱프론트엔드-백엔드 분리 방식의 경우, 백엔드는 원시 데이터만 제공한다. 따라서 스프링 MVC 다이어그램에서 뷰 리졸버가 더 이상 필요하지 않다. 스프링은 컨트롤러 클래스를 컨텍스트에 빈으로 등록하기 위해 `@Controller` 어노테이션을 사용한다. 하지만 HTTP 응답을 전달하기 위해서는 `@ResponseBody` 어노테이션이 필요하다. 이를 통해 컨트롤러가 뷰 이름이 아닌 HTTP 응답 데이터를 반환한다는 것을 디스패처 서블릿에게 알릴 수 있다.@RequestMapping("/member")@Controller // 컨..
- [ backend/프레임워크 ][spring] 스프링 AOP2024-11-10 15:43:11AOP; Aspect-Oriented Programming애스펙트는 프레임워크가 메서드 호출을 가로채고 그 메서드의 실행을 변경할 수 있는 방법이다. 애스펙트를 활용하면 비즈니스 로직과 함께 실행되는 로직을 분리하여 코드 중복을 줄이고 관심사를 명확하게 할 수 있다.여러 메서드에 로깅을 적용하는 과정을 가정해보자. 각 메서드에 중복된 로깅 코드를 추가하는 대신, 애스펙트를 적용하여 해당 메서드가 실행될 때 자동으로 로깅되도록 할 수 있다.애스펙트 (aspect) : 특정 메서드를 호출할 때 실행되는 코드 (= `execute` 메서드)어드바이스 (advice) : 언제 애스펙트를 실행해야 하는지 정의 (= `@Around` 어노테이션)포인트컷 (pointcut) : 어떤 메서드를 가로채야 하는지 정의 ..
- [ backend/프레임워크 ][spring] 스프링 컨텍스트2024-11-10 14:16:59스프링프레임워크는 어플리케이션을 개발하는 데 사용하는 기본 기능을 제공하는 소프트웨어 집합이다. 스프링은 자바 어플리케이션을 위한 프레임워크다.스프링 코어 : 스프링의 기본 기능을 제공하고, 대표적으로 스프링이 앱의 인스턴스를 관리할 수 있도록 컨텍스트를 제공한다.스프링 MVC스프링 데이터 액세스스프링 테스팅 스프링은 IoC를 원칙으로 동작한다. 즉, 스프링에게 제어 권한을 위임한다. 우리는 Configuration을 작성하여 스프링에 제어를 지시한다. 이렇게 스프링에게 제어 권한을 위임하여 인스턴스를 관리하게 되면 AOP를 통해 인스턴스의 메서드를 가로치는 것도 가능하다. 📁 스프링 프로젝트 구조 `src` 폴더 `main` 폴더 : 어플리케이션 소스 코드를 저장하는 곳으로, 자바..
- [ backend ][etc] access token & refresh token & JWT2024-09-22 21:52:42access token과 refresh tokenaccess token과 refresh token은 인증/인가 시스템에서 사용자의 신원을 확인하고 자원 접근을 제어하는 중요한 역할을 수행한다.access token인증/인가에 사용되는 토큰이다.짧은 유효기간을 가지기 때문에 탈취되더라도 보안 위험이 적다. (하지만 자주 갱신해야 한다)각 요청마다 토큰을 확인하여 인증하기 때문에 세션 관리의 부담을 줄일 수 있다.🤔 access token이 세션에 비해 갖는 장점비상태 : 사용자 요청이 올 때마다 세션 스토리지에서 사용자의 세션 정보를 조회할 필요가 없다. (= 단순 토큰 검증 만으로 상태 정보를 확인할 수 있다! 데이터베이스 조회 부담 X)확장성 : 서버 간에 세션 정보를 동기화할 필요가 없으므로 동기화..
- [ 카테고리 없음 ][Greenn Developers] NCP로 한국어 글쓰기를 도와주는 서비스 만들기2024-08-17 15:15:18Q. 프로젝트를 소개해 주세요.🔗 kopilot 서비스🔗 kopilot 깃허브kopilot은 GitHub의 Copilot이 코드를 자동으로 완성하여 개발자의 생산성을 향상시키는 것처럼, 인공지능을 활용하여 글쓰기의 효율을 높여주는 서비스입니다.kopilot은 자기소개서를 작성하며 힘들었던 경험에서 시작되었습니다. 자기소개서가 서류 결과에 큰 영향을 미치는 만큼, 내가 작성한 글이 일관된 주제를 갖고 있는지, 맞춤법을 잘 지키고 있는지, 적절한 길이의 문장으로 가독성을 보장하고 있는지 등 스스로 질문을 많이 던졌던 것 같습니다. 궁극적으로 내가 작성한 자기소개서는 잘 쓴 자기소개서인지 항상 궁금했습니다.자기소개서를 다듬기 위해 맞춤법 검사기와 OpenAI를 정말 많이 이용했습니다. 하지만 여러 사이트를..
- [ backend/k8s ][k8s] 쿠버네티스 시작하기 (클러스터링/오케스트레이션/도커 스웜/파드/레플리카셋/디플로이먼트/서비스)2024-06-20 16:21:38클러스터링 & 오케스트레이션클러스터링은 여러 대의 컴퓨터를 하나로 묶어 마치 하나의 컴퓨터처럼 사용하는 것을 의미한다. 이때 단일 컴퓨터를 노드라고 부른다. (여러 개의 노드가 모여서 하나의 클러스터로~) 오케스트레이션은 여러 대의 클러스터에서 컨테이너를 자동으로 배포/관리하는 것을 말한다. 오케스트레이션 도구로는 쿠버네티스, 도커 스웜, 아파치 메소스 등이 있다.🎻🎹🪈 : 특정 역할 담당 = 여러 연주자 (노드) 로 구성된 클러스터🎼 : 연주자 조율 = 컨테이너를 배포하고 관리하는 오케스트레이션🤯 기존 방식의 문제점확장성 부족 : 하드웨어 성능의 한계로 인해 쉽게 확장할 수 없으며, 트래픽 증가 시 서비스 장애가 발생한다.관리의 복잡성 : 여러 대의 서버를 수동으로 관리하는 것은 복잡하고 많은..
- [ 학습기록/CS 공부 ][네트워크/KOCW] Chap4 & 5. Network Layer2024-06-10 15:18:51네트워크 계층의 주요 업무는 송신자의 packet을 수신자에게 전달하는 것이다. 네트워크 계층은 data plane과 control plane으로 나뉜다.data plane : 라우터는 input link로부터 받은 datagram을 적절한 output link로 전달한다. (forwarding)control plane : 라우터는 송신자에서 수신자로 가는 경로를 결정한다. (routing)라우터의 핵심 요소는 forwarding table과 routing algorithm이다. 라우터는 packet의 헤더를 검사하고, 헤더 값을 forwarding table의 인덱스로 사용하여 packet이 어느 output link로 가야 하는지 결정한다. (data plane) 이때, forwarding table..
- [ 학습기록/CS 공부 ][네트워크/KOCW] Chap3. Transport Layer2024-06-07 15:54:08전송 계층은 end system에만 존재하는 계층으로, 라우터 같은 network core에는 없는 계층이다. 따라서 전송 계층은 네트워크 계층이 처리할 수 있는 데이터로 가공하여 전달해야 한다. 송신자 측의 전송 계층은 어플리케이션 계층으로부터 받은 메시지를 작은 단위 (segment) 로 쪼개고, 이를 네트워크 계층으로 전달한다. segment는 네트워크 계층에서 datagram으로 캡슐화되어 목적지까지 전송된다. 이때, 라우터는 segment의 내부 내용을 살펴보진 않는다.**네트워크 계층은 segment의 전송 여부, 순서, 무결성 등을 보장하지 않는다. (unreliable service) 전송 계층은 네트워크 계층의 바로 위에 존재한다. 네트워크 계층은 호스트 간의 논리적인 의사소통을 담당하는..