본문 바로가기

Server

(9)
[SpringBoot] JWT 로그인 구현하기(1) JWT 방식 로그인을 선택하는 이유1. 세션 기반 인증JWT에 대해 알아보기 전에, 전통적으로 널리 사용되어 오고있는 세션 기반 인증 방식에 대해 알아보도록(까보도록) 하겠습니다.세션 기반 인증은 로그인 후 서버에서 세션 ID를 생성해 서버 메모리에 저장합니다.클라이언트는 쿠키에 응답받은 세션 ID를 저장합니다.이후 요청마다 자동으로 쿠키를 전송하여 로그인한 사용자인지 식별합니다. 장점- 구현이 비교적 쉬움- 로그아웃, 강제 만료 등 로그인 상태를 서버에서 직접 관리- 최초 쿠키만 세팅하면 클라이언트에서 신경쓸게 없음 단점- 모든 로그인한 사용자의 상태를 서버 메모리에 저장- 서버가 여러개인 환경에서는 세션을 공유해야 하는 문제 발생- 쿠키 탈취 위험- 웹브라우저에 의존적 2. JWT 방식JWT 방식에서..
[MySQL] root 비밀번호 변경 오랜만에 맥북 에어를 켰다..옛날에 다운받은 mysql에 root 비밀번호 설정이 안돼있어서 DB 접속 불가 .. -_- 과거의 내가 떠넘긴 일을 해봅시다.. 1. 비밀번호를 입력하지 않고 실행하겠다mysql.server start --skip-grant-tables>>ERROR! The server quit without updating PID file PID 파일 업데이트를 하지 못한채 종료되었다고 합니다.. 이미 실행중일 확률이 큽니다 1-2. 실행오류 해결ps -ef | grep mysql실행중인 mysql 들이 보입니다..그냥 모두 kill 해버립니다. (저는 로컬이라 다 kill 했습니다. 운영 서비스중인 프로세스는 함부로 죽일 생각 하면 안됩니다이)kill {PID} 드디어.. mysql ..
jar src/main/resources 그런 파일이나 디렉터리가 없습니다 주제 :파일 또는 디렉터리 찾을 수 없는 IOException 분석 및 해결.. 문제 구간 :Document doc = Jsoup.parse(new File(type.getTemplatePath()), "UTF-8");Document document = new Document(new PdfDocument(new PdfWriter(pdfPath))); 이런 소스에서 프로젝트 기준으로 src/main/resources, upload/pdfs 경로에 업로드 한다. (라고 알고 있었다) 문제 증상 :프로젝트 루트 아래에 해당 폴더들이 있는데 자꾸 IOException 발생. 원인 :파일 읽기/쓰기는 상대경로다.이 때 상대경로는 실행 경로 기준 상대 경로로, java jar 명령어를 실행 한!!! 시점의 경로가 ..
[SpringBoot] 조회 API 만들기 - 응답 객체 만들기UserDto.javaid, name을 반환하는 응답객체를 생성합니다.@Getter : 컨트롤러에서 응답을 반환할 때 Jackson이 JSON으로 변환하는 과정에서 getter를 사용하기 때문에 필수입니다.나중에 entity를 조회하여 곧바로 dto로 변환하기 위해, User 엔티티를 전달받는 생성자를 구현했습니다. - Service 구현UserService.javarepository에서 user 엔티티를 조회합니다.만들어둔 dto의 생성자를 호출하여 응답을 반환합니다. - Controller 구현UserController.java[GET] "/users/1" 형태의 요청이 들어오면 처리합니다. - 테스트 성공~~
[SpringBoot] 레이어드 아키텍처를 적용하여 API 만들기 레이어드 아키텍처로 User를 저장하는 API를 만들겠습니다. * 레이어드 아키텍처[ Controller ] : http 요청을 받습니다. 클라이언트 및 Service와 데이터를 주고받기 위해 주로 [DTO] 객체를 사용합니다.[ Service ] : 비즈니스 로직을 처리합니다. Repository와 데이터를 주고받기 위해 주로 [Entity] 객체를 사용합니다.[ Repository ] : CRUD 작업을 수행합니다. DB와 데이터를 주고받기 위해 주로 [Entity] 또는 [DAO] 객체를 사용합니다. 1. 패키지 분리레이어드 아키텍처를 구현하기 위한 구조로 패키지를 분리합니다.controller : 클라이언트로부터 GET, POST 등의 API 요청을 받기 위한 진입점입니다.service : 비즈..
[SpringBoot] JPA, MySQL 설정 JPA란 DB와 자바객체를 맵핑하여 쉽게 사용하기 위한 모듈입니다.프로젝트에서 JPA, MySQL를 사용하기 위한 환경설정을 진행하겠습니다. build.gradle에 jpa, mysql connector, lombok 라이브러리를 추가합니다. // JPA implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // MySQL runtimeOnly 'com.mysql:mysql-connector-j' // Lombok compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' mysql에서 프로젝트에 사용할 스키마를 생성합니다. ..
[SpringBoot] 프로젝트 만들기 1. 프로젝트 생성스프링 이니셜라이저(Spring Initializr) 사용👉 https://start.spring.io/ 접속Spring Boot 버전은 최신 LTS인 3.4.5를 선택합니다.SNAPSHOT은 개발중인 테스트 버전, RC1은 출시 후보 버전으로, 뒤에 아무것도 붙어있지 않은 버전을 선택하면 됩니다.(spring.io 에서 최신 릴리즈 버전 확인 가능)Java 버전은 가장 많이 사용하는 17버전을 선택했습니다. [Generate] 버튼을 클릭하여 zip 파일 다운로드 및 압축해제IDE에서 build.gradle이 속한 루트폴더를 오픈2. 프로젝트 실행프로젝트를 바로 실행시켜보면 웹서버가 실행되지 않고'BUILD SUCCESSFUL ~' 로그만 뜨고 종료됩니다. 해결하기 위해서는 웹서버 ..
[리눅스/FTP/FileZilla] 오늘은.. 리눅스 서버에 있는 파일에 ftp를 통해 접근하기 위해 계정을 만들고 권한을 줄것입니다 $ sudo useradd -d /home/dev -s /bin/bash jykim user add jykim : jykim 이라는 사용자 생성 -d /home/dev : 홈디렉토리 -s /bin/bash : 로그인 쉘 $ sudo passwd jykim 생성한 사용자의 비밀번호 지정 $ cat /etc/passwd | grep "/home/dev" 만들어진 사용자는 이렇게 조회할 수 있다.. 호스트 : IP 또는 도메인 사용자명 : 위에서 만든 사용자 비밀번호 : 위에서 설정한 비밀번호 포트는 바꾼게 아니면 별도로 지정할 것 없다 ftp 접속 계정정보는 꼭.. 메모해놓자 미래의 나를 믿지마 TS ~ chr..
[리눅스/아파치] 아파치 서버 재시작 명령어 안될때 부제 : service apachectl restart not working 환경 : CentOS 7 / Apache 2.4.57 아래 명령어 실행해도 아파치 재시작이 안됨 $ sudo service apachectl restart 이럴때는.. 아파치가 설치된 경로의 bin 폴더로 이동한다 $ cd /usr/local/apache/bin 여기서 apachectl로 start,stop,restart를 실행하면 된당 $ ./apachectl restart 매번 경로를 찾아와서 재시작 하기 귀찮기 때문에.. systemctl을 사용할 수 있게 바꿔주자.. (내일의 나를 위해 지금의 내가 후딱 해버리자..) $ sudo cp /usr/local/apache/bin/apachectl /etc/init.d/ $ ..