CI/CD란 무엇일까?

2023년 10월 15일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며지난 해커톤, 배포로 인한 많은 불편과.. 걱정을 겪고 Docker를 이용한 배포 방법과 GitHub Actions를 이용한 자동화 배포를 진행하는 방법을 열심히 공부하면서 마침내 CI/CD 구축을 완료하였다. 간단히 설명하자면 develop 브런치에서 테스트가 완료된 커밋들을 PR을 통해 main 브런치에 머지 작업을 완료하면 자동으로 빌드가 진행되며, 도커 이미지를 만들고 Ubuntu 서버에 배포하는 작업을 자동화하였다. 그래서 일단 구현은 했고, CI/CD가 어떤 의미, 개념을 가지고 있는지 알아보고 싶기 때문에 이 글을 작성하게 되었다.CI(Continuous Integratio..

Backend

Cookie, Session, Token(JWT) 정리하기

2023년 10월 13일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.프로젝트를 진행하면서 백엔드(Spring Boot)에서는 유효 기간이 존재하는 접근 토큰을 발급하고, React에서는 그 토큰을 받아 클라이언트의 localStorage에 저장하여 특정 행위를 할 때 사용자임을 인증하는 방식으로 JWT 방법을 사용했었는데, 사용을 하기만 할 뿐 개념이나 쿠키, 세션 방식과의 차이점은 정확히 이해하지 못 했다. 이 글에서는 사용자 인증 방식 중 쿠키, 세션, 토큰 방식의 차이점에 대해 이해하고 공부하면서 정리한 것들을 적어보려 한다.HTTP의 특성HTTP: 인터넷 상에서 데이터를 주고 받기 위해 서버 또는 클라이언트 모델을 따르는 프로토콜HTTP는 위 사진과 같..

Backend/Java

'Spring Boot + React' 카카오 소셜 로그인 도입하기 (2)

2023년 10월 11일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.지난 글에 이어서 이번 글에서는 Spring Boot에서 카카오 소셜 로그인을 위해 어떤 작업을 해야하는지에 대해 적어보려 한다. Spring Boot에서 카카오 소셜 로그인을 구현하려면 아래와 같은 간단한 과정만 구현하면 된다.프론트엔드에서 전달받은 인가코드로, 접근 토큰 받아오기 (카카오 API 사용)접근 토큰으로 카카오 계정 정보 불러오기 (카카오 API 사용)불러온 카카오 계정 정보로 우리 서비스 회원에 등록하기위 과정에서 2번까지만 구현한다면, 3번의 과정은 기존 JWT를 이용한 회원가입 과정과 동일하다.인가코드로 접근 토큰 받아오기프론트엔드에서 인가코드를 받아올 수 있는 카카오 로그..

Backend/Java

'Spring Boot + React' 카카오 소셜 로그인 도입하기 (1)

2023년 9월 27일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.해커톤에서 진행하던 프로젝트를 이어서 개발하고 있는데, 소셜 로그인을 구현하기로 계획했다. 소셜 로그인 같은 경우에는 처음 개발해 보기 때문에 어떤 과정으로 개발을 해야하는지 처음에는 이해가 잘 되지 않았다. 그래서 정리도 할 겸,, 백엔드는 Spring Boot, 프론트엔드는 React를 사용하고 로그인 방식은 JWT 인증 방식을 사용하는 과정에서 카카오 소셜 로그인을 구현한 방법에 대해 적어보려 한다.Spring Boot: 2.5.6Java 11, JDK 11Flow 이해하기처음에 카카오 소셜 로그인을 도입하기 위해서 Kakao Developer에서 확인했던 사진이다. 지금 보면 어떤 과정을..

Backend/Java

리눅스에서 FTP 연결 없이 터미널로 서버에 파일 전송하기

2023년 8월 4일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.SCP란?SSH 원격 접속 프로토콜을 기반으로 한, Secure Copy의 약자로 원격지에 있는 파일과 디렉터리를 보내거나 가져올 때 사용하는 파일 전송 프로토콜SCP 사용의 장점파일을 전송하려고 FTP 서버를 구축하지 않아도 될 뿐만 아니라, SSH와 동일한 22번 포트를 사용해 전송하기에, 보안도 뛰어나고, 디렉터리나 파일 전송이 간편합니다.로컬(Local)에서 Remote(원격지)로 파일 전송하기scp [전송 대상 파일 경로] [원격지 계정]@[IP]"/[전송될 파일 경로]전송 대상 파일 경로가, /Users/yunhwan/Desktop/test.jar이고, 원격지 계정이 root, IP가 ..

Backend/Linux

Spring Boot와 React간 개발 환경 연동

2023년 7월 8일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.궁금증기존에는 웹 개발을 PHP의 프레임워크인 Laravel을 사용하여 개발했다. 하지만, '멋쟁이사자처럼 대학 11기' 동아리에 참여하면서 Spring Boot를 처음 접하게 되었는데, '나는 백엔드를 개발하고 API를 만들면, 대체 프론트엔드에서는 이걸 어떻게 활용하고, 같이 작업하는 걸까?' 라는 의문이 생겼다. 그래서 찾아본 결과, Spring Boot와 React를 연결할 수 있었고, 이를 이용해서 API를 요청, 반환하여 데이터를 주고 받는 방법을 사용하고 있다는 것에 대해 알게되었다.작업 환경Java 11macOS Monterey 12.6Spring Boot 2.5.6전체 과정Spri..

Backend

Laravel Routing - 그룹화

2023년 2월 11일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.문제 상황Laravel에서 간단한 프로젝트를 만들던 도중, web.php에 라우팅된 여러가지 것들이 있는데, 중복되는 부분이 많아 그룹화 할 수 있는 방법이 없을까라는 의문이 생겼다. 문제의 부분은 아래와 같다.(web.php 일부)Route::get('/upload', [ExpressController::class, 'upload'])->name('upload.view');Route::post('/upload', [ExpressController::class, 'post'])->name('upload');Route::get('/{name}', [ExpressController::class, '..

Backend/PHP

CI/CD란 무엇일까?

2023년 10월 15일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며지난 해커톤, 배포로 인한 많은 불편과.. 걱정을 겪고 Docker를 이용한 배포 방법과 GitHub Actions를 이용한 자동화 배포를 진행하는 방법을 열심히 공부하면서 마침내 CI/CD 구축을 완료하였다. 간단히 설명하자면 develop 브런치에서 테스트가 완료된 커밋들을 PR을 통해 main 브런치에 머지 작업을 완료하면 자동으로 빌드가 진행되며, 도커 이미지를 만들고 Ubuntu 서버에 배포하는 작업을 자동화하였다. 그래서 일단 구현은 했고, CI/CD가 어떤 의미, 개념을 가지고 있는지 알아보고 싶기 때문에 이 글을 작성하게 되었다.CI(Continuous Integratio..

Backend

Cookie, Session, Token(JWT) 정리하기

2023년 10월 13일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.프로젝트를 진행하면서 백엔드(Spring Boot)에서는 유효 기간이 존재하는 접근 토큰을 발급하고, React에서는 그 토큰을 받아 클라이언트의 localStorage에 저장하여 특정 행위를 할 때 사용자임을 인증하는 방식으로 JWT 방법을 사용했었는데, 사용을 하기만 할 뿐 개념이나 쿠키, 세션 방식과의 차이점은 정확히 이해하지 못 했다. 이 글에서는 사용자 인증 방식 중 쿠키, 세션, 토큰 방식의 차이점에 대해 이해하고 공부하면서 정리한 것들을 적어보려 한다.HTTP의 특성HTTP: 인터넷 상에서 데이터를 주고 받기 위해 서버 또는 클라이언트 모델을 따르는 프로토콜HTTP는 위 사진과 같..

Backend/Java

'Spring Boot + React' 카카오 소셜 로그인 도입하기 (2)

2023년 10월 11일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.지난 글에 이어서 이번 글에서는 Spring Boot에서 카카오 소셜 로그인을 위해 어떤 작업을 해야하는지에 대해 적어보려 한다. Spring Boot에서 카카오 소셜 로그인을 구현하려면 아래와 같은 간단한 과정만 구현하면 된다.프론트엔드에서 전달받은 인가코드로, 접근 토큰 받아오기 (카카오 API 사용)접근 토큰으로 카카오 계정 정보 불러오기 (카카오 API 사용)불러온 카카오 계정 정보로 우리 서비스 회원에 등록하기위 과정에서 2번까지만 구현한다면, 3번의 과정은 기존 JWT를 이용한 회원가입 과정과 동일하다.인가코드로 접근 토큰 받아오기프론트엔드에서 인가코드를 받아올 수 있는 카카오 로그..

Backend/Java

'Spring Boot + React' 카카오 소셜 로그인 도입하기 (1)

2023년 9월 27일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.해커톤에서 진행하던 프로젝트를 이어서 개발하고 있는데, 소셜 로그인을 구현하기로 계획했다. 소셜 로그인 같은 경우에는 처음 개발해 보기 때문에 어떤 과정으로 개발을 해야하는지 처음에는 이해가 잘 되지 않았다. 그래서 정리도 할 겸,, 백엔드는 Spring Boot, 프론트엔드는 React를 사용하고 로그인 방식은 JWT 인증 방식을 사용하는 과정에서 카카오 소셜 로그인을 구현한 방법에 대해 적어보려 한다.Spring Boot: 2.5.6Java 11, JDK 11Flow 이해하기처음에 카카오 소셜 로그인을 도입하기 위해서 Kakao Developer에서 확인했던 사진이다. 지금 보면 어떤 과정을..

Backend/Java

리눅스에서 FTP 연결 없이 터미널로 서버에 파일 전송하기

2023년 8월 4일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.SCP란?SSH 원격 접속 프로토콜을 기반으로 한, Secure Copy의 약자로 원격지에 있는 파일과 디렉터리를 보내거나 가져올 때 사용하는 파일 전송 프로토콜SCP 사용의 장점파일을 전송하려고 FTP 서버를 구축하지 않아도 될 뿐만 아니라, SSH와 동일한 22번 포트를 사용해 전송하기에, 보안도 뛰어나고, 디렉터리나 파일 전송이 간편합니다.로컬(Local)에서 Remote(원격지)로 파일 전송하기scp [전송 대상 파일 경로] [원격지 계정]@[IP]"/[전송될 파일 경로]전송 대상 파일 경로가, /Users/yunhwan/Desktop/test.jar이고, 원격지 계정이 root, IP가 ..

Backend/Linux

Spring Boot와 React간 개발 환경 연동

2023년 7월 8일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.궁금증기존에는 웹 개발을 PHP의 프레임워크인 Laravel을 사용하여 개발했다. 하지만, '멋쟁이사자처럼 대학 11기' 동아리에 참여하면서 Spring Boot를 처음 접하게 되었는데, '나는 백엔드를 개발하고 API를 만들면, 대체 프론트엔드에서는 이걸 어떻게 활용하고, 같이 작업하는 걸까?' 라는 의문이 생겼다. 그래서 찾아본 결과, Spring Boot와 React를 연결할 수 있었고, 이를 이용해서 API를 요청, 반환하여 데이터를 주고 받는 방법을 사용하고 있다는 것에 대해 알게되었다.작업 환경Java 11macOS Monterey 12.6Spring Boot 2.5.6전체 과정Spri..

Backend

Laravel Routing - 그룹화

2023년 2월 11일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.문제 상황Laravel에서 간단한 프로젝트를 만들던 도중, web.php에 라우팅된 여러가지 것들이 있는데, 중복되는 부분이 많아 그룹화 할 수 있는 방법이 없을까라는 의문이 생겼다. 문제의 부분은 아래와 같다.(web.php 일부)Route::get('/upload', [ExpressController::class, 'upload'])->name('upload.view');Route::post('/upload', [ExpressController::class, 'post'])->name('upload');Route::get('/{name}', [ExpressController::class, '..

Backend/PHP