Jekyll RSS를 생성할 때, jekyll-feed로 적용해보기

Introduction The Atom Syndication Format is an XML language used for web feeds. A web feed (also called ’news feed’ or ‘RSS feed’) is a data format used for providing users with frequently updated content. Content distributors syndicate a web feed, thereby allowing users to subscribe a channel to it. A typical scenario of web-feed use might involve the following: a content provider publishes a feed link on its site which end users can register with an aggregator program (also called a feed reader or a news reader) running on their own machines. ...

April 9, 2025 02:38 · 1 min · 173 words · nakji

Photopic) 여기서 경험한 개발 문화

이전 포스트 를 읽고 오시는 것을 추천드립니다. 이번 프로젝트를 하면서 가장 좋은 경험 중 하나가 개발 문화였다. 백엔드 개발자로서 같은 백엔드와, 다른 직군들과 소통을 할 때 어떤 용어를 사용하고 협업하는게 이전 직장에서는 경험하지 못했던 새로운 경험이었다. 이전 직장에서는 개발 용어집은 있었지만 제대로 적용하지 않은 부분이 많았고, 코드 리뷰가 없고 알아서 잘 했겠지 하는 마인드로 테스트는 작업한 사람만 했다. 그래서 나는 중요한 작업의 경우 내가 1차로 테스트 후 PR을 올릴 때, 전체 플로우랑 중요하게 봤으면 하는 부분들을 언급해서 요청했었다. ...

April 6, 2025 13:52 · 3 min · 533 words · nakji

Photopic) AWS Lambda를 왜 써야할까?

이전 포스트 를 읽고 오시는 것을 추천드립니다. 내가 뽀또픽을 진행하면서 맡은 업무 중 이미지 업로드가 있는데, 이 작업을 하면서 왜 Lambda를 쓰게 됐는지 기록하고자 한다. 초기 설계 (시작 ~ 1차 MVP) 인프라는 AWS 서버를 사용하니 이미지 저장을 위해 S3 스토리지를 이용하고 필요한 부분이 생기면 Lambda도 사용하자는 계획이 있었다. 예시로 추후 리사이징 기능을 추가한다면 메인 서버에서 처리하기보다 람다에 리사이징을 맡기는 것이 트래픽 분산이나 유지보수에 좋다고 판단을 했다. 하지만 규모가 작은 서비스에서 굳이 Lambda를 쓰지 않아도 충분히 주요 기능을 구현했기 때문에 Lambda는 안쓰는 것으로 결정했다. 또, 1차 MVP에서 이미지 확장자를 jpg(jpeg), png, gif만 허용하기로 결정했기 때문에 람다는 쓰지 않는 방향으로 결정했다. ...

April 5, 2025 12:55 · 2 min · 298 words · nakji

Photopic) 스위프 8기 단기 프로젝트 후기, 뽀또픽

🔔 프로젝트 참여 과정 🔔 프로젝트 소개 참여 계기 이전 직장에서 레거시한 경험만 있다 보니 스킬업을 하기 위해, 내 레벨이 시장에서 어느 정도인지 측정하기 위해 참가했다. 스위프 8기 프로그램은 서류접수와 참가비만 있으면 됐다. 팀 빌딩 때 프로필을 보니 대부분이 20대이며, 취준생과 신입들이 많았다. 프로젝트 기간은 팀 빌딩기간부터 마지막 발표하는 날까지 1/15 ~ 3/15, 두달간 진행했다. 프로젝트와 팀원 우리 팀은 기획1, 디자이너1, 프론트2, 백엔드2(나 포함)로 구성했다. 스위프에서 팀 빌딩을 위해 각 프로필을 노션 페이지를 공유해줬는데 거기서 지금의 팀원들을 만났다. 프로젝트 아이디어는 여러 의견이 있었지만 “SNS에 어떤 사진을 올리는게 좋을까?“라는 의문을 해결하기 위해 사진을 투표하고 공유할 수 있는 “뽀또픽"이라는 서비스를 만들었다. ...

March 31, 2025 21:20 · 2 min · 357 words · nakji

springframework.http.ResponseEntity

🔔 ResponseEntity 개요 🔔 다른 방법과 비교 What? Why? 스프링 3 버전부터 도입되었으며, 스프링 MVC에서 HTTP 응답을 다루는 주요 클래스 중 하나이다. HTTP 응답의 전체 내용을 제어할 수 있도록 해주며, 이를 통해 다음과 같은 요소들을 설정할 수 있다. 상태 코드 (HTTP Status Code) : 200 OK, 404 Not Found, 500 Internal Server Error 등 헤더 (Headers) : 응답 헤더에 특정 값을 추가/수정 본문 (Body) : 실제로 클라이언트에게 전달될 데이터 @GetMapping("/example") public ResponseEntity<String> getExample() { String body = "Hello, World!"; HttpHeaders headers = new HttpHeaders(); headers.add("Custom-Header", "CustomValue"); return new ResponseEntity<>(body, headers, HttpStatus.OK); } @ResponseBody 객체를 직렬화하여 반환하는 어노테이션으로, 이것만 사용할 경우 헤더를 유연하게 설정할 수 없다. @ResopnseStatus를 사용하여 헤더를 설정할 수 있지만, 어노테이션을 별도로 추가해야하는 단점이 있다. ...

January 24, 2025 11:05 · 1 min · 195 words · nakji

4D4cat) 이 어노테이션은 왜 쓰는걸까?

🔔 어노테이션 종류와 용도 RequiredArgsConstructor Lombok 라이브러리에서 제공하는 어노테이션으로, 클래스 내의 final 필드나 @NonNull 어노테이션이 붙은 필드들을 초기화하는 생성자를 자동으로 생성해준다. 보일러 플레이트 코드를 줄여준다는 것에 이점이 있다. @Service @RequiredArgsConstructor public class UserService { private final UserRepository userRepository; private final EmailService emailService; // Lombok이 아래와 같은 생성자를 자동으로 생성해줍니다. // public UserService(UserRepository userRepository, EmailService emailService) { // this.userRepository = userRepository; // this.emailService = emailService; // } // 서비스 로직... } Autowired와 차이점 실제로 기능은 동일하지만, 코드량의 차이가 있다. ...

January 23, 2025 13:33 · 3 min · 556 words · nakji

OAuth2 Deepdive

🔔 Oauth2 적용 전 🔔 Oauth2 실습 개요 최근 개인 프로젝트에서 네이버 로그인을 위해 필요한 부분을 설정하고 로직을 구현했다. 개발 가이드에 맞게 각 단계별로 진행을 했으나… 아무리 봐도 과정 하나 하나를 내 손으로 직접 구현하는게 맞는건가? 라는 의문을 시작으로 좀 더 효율적으로 구현하는 방법을 찾아봤고, 그렇게 Oauth 2.0으로 로그인하는 방식을 찾게 되었다. Oauth2 적용 전 코드 스타일을 떠나서 지금 와서 보니 마치 Oauth 1.0처럼 구현을 하고 있었다. 나 또한, 각 플로우마다 하드 코딩은 줄이고 변수나 함수를 재활용하기 위해, 보안 요소를 생각하면서 구현했었다. ...

January 18, 2025 11:48 · 4 min · 768 words · nakji

OAuth2

🔔 Oauth2? 그럼 Oauth1도? 🔔 Oauth2 동작 과정 RFC6749(Oauth 2.0) 문서를 토대로 요약하여 정리한 글이니, 자세한 내용은 해당 문서를 참고해주시기 바랍니다. What? Why? 인증(authentication) 이 아닌 인가(authorization)에 초점을 맞추며, 리소스 소유자가 클라이언트에게 자신의 리소스에 대한 제한적 접근 권한을 부여할 수 있도록 하는 프레임워크 역할 Resource Owner 보호된 리소스(Protected Resource)의 실제 소유자 혹은 주체 ex) 사용자의 계정, 사용자 데이터 Resource Server 보호된 리소스를 호스팅(저장 및 관리)하고 있는 서버 클라이언트가 제공하는 액세스 토큰을 검증하고, 유효한 토큰이면 리소스 접근을 허용 Client ...

January 17, 2025 17:23 · 3 min · 450 words · nakji

HttpClient Deepdive

🔔 BodyPublisher, BodyHandler 역할 🔔 HttpClient 실습 BodyPublisher? BodyHandler? BodyPublisher와 BodyHandlers는 요청과 응답의 본문을 처리하는 데 있어 상호 보완적인 역할을 한다. BodyPublisher는 클라이언트가 서버로 전송할 데이터를 정의하고, BodyHandlers는 서버로부터 받은 데이터를 어떻게 처리할지를 정의한다. 이 두 구성 요소를 적절히 활용하면, HTTP 통신을 더욱 유연하고 효율적으로 구현할 수 있다. BodyPublisher HTTP 요청의 본문을 제공 데이터를 전송할 때 어떻게 제공할지 정의 BodyPublishers.ofString(String): 문자열 데이터 BodyPublishers.ofByteArray(byte[]): 바이트 배열 데이터 BodyPublishers.ofFile(Path): 파일 데이터 BodyPublishers.ofInputStream(Supplier<InputStream>): 동적으로 생성되는 입력 스트림 BodyHandler HTTP 응답의 본문을 처리하는 방법을 정의 서버로부터 받은 응답 데이터를 어떻게 처리할지 정의 BodyHandlers.ofString(): 문자열 데이터 BodyHandlers.ofByteArray(): 바이트 배열 데이터 BodyHandlers.ofFile(Path): 파일 데이터 BodyHandlers.ofInputStream(): InputStream으로 데이터 제공 HttpResponse.BodyHandler 클래스는 BodyHandler를 생성하기 위한 여러 가지 편리한 정적 팩토리 메서드를 제공한다. 이들 중 다수는 응답 바이트가 완전히 수신될 때까지 메모리에 축적되며, 그 후 응답 바이트는 상위 수준의 Java 유형(ofString, ofByteArray 등)으로 변환된다. ...

January 12, 2025 17:37 · 2 min · 386 words · nakji

java.net.http.HttpClient

🔔 HttpClient 개요 🔔 HttpClient 개선 과정 🔔 다른 라이브러리 비교 What? Why? 자바에서 HTTP 요청을 생성하고, 서버와 통신하며, 응답을 처리하기 위한 API Java 11에서 표준 라이브러리로 도입되었으며, 이전의 HttpURLConnection보다 사용하기 쉽고 기능이 풍부하다. 빌더 패턴 도입: HttpRequest.newBuilder() 역할 분리: HttpClient, HttpRequest, HttpResponse 비동기 처리 지원: HttpClient.sendAsync() 주요 클래스 HttpClient: HTTP 요청을 보내기 위한 클라이언트 객체를 생성 HttpRequest: HTTP 요청의 세부 사항(URI, 메서드, 헤더 등) HttpResponse: 서버로부터 받은 HTTP 응답 주요 메서드 HttpClient.newHttpClient() 기본 설정을 사용한 HttpClient 인스턴스를 생성 - 요청(GET), 프로토콜(HTTP/2), 리다이렉트(NEVER), SSL(Default) ...

January 10, 2025 16:43 · 2 min · 272 words · nakji