일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- DI
- html
- WIL
- Java
- web
- programmers
- bean
- oauth
- jenkins
- python
- flask
- Stream
- 생명주기 콜백
- hanghae99
- session
- Spring Security
- Anolog
- JWT
- jQuery
- Project
- real time web
- SseEmitter
- javascript
- Hibernate
- server send event
- JPA
- cookie
- spring
- 항해99
- google oauth
- Today
- Total
목록spring (23)
끄적끄적 코딩일지
저번글에 이어서 이번 글에서는 Spring 자동배포 방법을 포스팅 하겠다. ※ 먼저 이 글은 Spring 서버와 Jenkins서버가 분리되어 있으며 각 서버는 EC2 free tier Ubuntu 18.04 버전으로 되어있다. 자동배포는 Jenkins에서 SSH 연결을 통해 배포파일 업로드 및 Shell Script 실행하는 방식으로 진행되며 현제 Ubuntu 20번대 버전에서는 Jenkins에서 SSH 연결을 하지 못하는 버그가 있으므로 참고하면 된다. 자동배포를 SSH를 통해서 하는경우 데시보 -> Jenkins 관리 -> 플러그인 관리 -> 설치 가능에서 Publish Over SSH를 설치한다. 이어서 Jenkins 관리 -> 시스템 설정에서 제일 아래에 있는 Publish over SSH에서 S..
※항해 99를 진행하면서 배포할 서버로 나의 EC2를 사용하게 되었다. 그중에 Spring을 개발하는 사람은 나포함 3명이다. 그런데 내가 쓴 코드를 반영해서 배포할때는 괜찮은데 다른 사람이 쓴 코드를 배포할때는 1. Github에서 해당 코드를 받음 (충돌이 일어나면 해결해야됨) 2. Intellij에서 bootJar으로 jar 파일 생성 3. EC2에 SSH 접속 및 FileZila(파일 업로드 프로그램)으로 접속 4. 기존 서버 종료 5. jar파일 업로드 6. 다시 Spring 서버 시작 ...... 그러다가 코드에 오류가 있으면 해당 부분을 맏은 팀원에게 전달하고 팀원이 해당 오류를 해결하면 다시 반복... 프리티어라도 나의 EC2서버니 다른사람에게 맏기기도 좀 그렇고 좋은 방법이 없나 고민하던..
Spring에서는 Thymeleaf, JSP등을 사용하여 동적 WebPage을 만들 수 있다. 하지만 때에 따라서는 Front는 React으로 구성하고 BackEnd를 Spring을 사용하여 구성할 때가 있다. 하지만 React에서 Thymeleaf, JSP등의 Spring의 템플릿 엔진은 사용을 하지 못하고 React와 Spring은 서로 다른 구조를 가지고 있기 완전히 하나의 서버로 작동하지 못한다. 그렇다면 Spring과 React를 연동하기 위해서는 역할을 구분해야한다. Spring에서는 RestApi등을 사용하여 순수 데이터만 제공하고 React에서 Axios등을 써서 해당 Api를 호출하는 방식으로 해야한다. 하지만 기본적으로 Spring에서는 Cross-Origin요청을 제한하기 때문에 CO..
SSE(Server Send Event)에 대한 개념은 아래글을 참고하자 Web에서 실시간 데이터를 표시하기 Http 통신은 한번 통신이 이루어지면 연결이 완전히 끊긴다. 때문에 일반적으로는 Server에서 일어나는 변화를 Client에 알릴 방법이 없다. 그렇다고 단순히 Request를 지속적으로 보낸다면 그만큼 서 blablacoding.tistory.com SSE는 Http 기반의 Streaming을 활용한 기술이므로 Spring-web 라이브러리가 필요하다. SSE를 사용하여 데이터 베이스 데이터를 실시간으로 받아오도록 해 보자 Step 1. Controller에서 SSE 만들기 @Controller public class SseController{ // Client의 현제 연결 목록 privat..
Java상에서 Collection이란? 여러 데이터들의 집합, 그룹등을 의미하며 List, Map, Set등 모든 데이터들의 집합을 의미하는 클레스들은 모두 Collection을 참조하고 있다. Entity에서 Collection 사용하기 다른 Entity와 List등의 연관관계는 OneToMany 혹은 ManyToMany를 사용하여 표시할 수 있다. 하지만 만약 단순한 String 값이나 Map 같이 Map으로 묶는 경우에는 해당 객체가 Colletion객체임을 알려주는 @ElementCollection을 사용해야한다. 1. List @Entity public class EntityClass{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) priva..
이 글은 저번글에서 Google Console에 OAuth 를 사용하기 위한 사전 준비를 하던 글에서 이어진다. 2022.06.08 - [Spring] - [Spring] Spring Security + OAuth2 (1) - 프로젝트 설정하기 [Spring] Spring Security + OAuth2 (1) - 프로젝트 설정하기 OAuth란? Open Authorization의 약자로써 사용자 인증을 위한 개방형 프로토콜이다. 사용자들이 Id와 Password등을 제공하지 않고도 다른 웹사이트의 자신의 정보를 조회하여 로그인 하고자 하는 어플리 blablacoding.tistory.com 위 글에서 최종적으로 Client Id와 Client 보안 비밀번호를 발급받았을 것이다. 그 정보를 applica..
OAuth란? Open Authorization의 약자로써 사용자 인증을 위한 개방형 프로토콜이다. 사용자들이 Id와 Password등을 제공하지 않고도 다른 웹사이트의 자신의 정보를 조회하여 로그인 하고자 하는 어플리케이션등에 로그인 하거나 회원가입을 쓸때 사용된다. 가장 좋은 예시가 Google이나 Naver, Kakao 등을 사용한 로그인이나 회원가입을 하는것이다. Spring에서 OAuth를 사용하려면 Spring Security와 Spring OAuth2 Client 라이브러리가 필요하다. 제일먼저 라이브러리부터 추가하도록 하자 dependencies { implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' imp..
JWT란? Json Web Token의 약자로 Json 포맷을 사용하여 사용자의 속성을 저장하는 Claim기반의 Web Token이다. JWT는 암호화 방식과 type등에 대한 정보가 있는 Header, 사용자에 대한 정보(Claim)와 Token에 대한 정보를 담고있는 PayLoad, Token을 인코딩하거나 유효성을 검증할 때 쓰는 암호화 코드인 Signatured으로 구성되어 있다. Spring Security에서 JWT 사용하기 Spring security에서 JWT를 사용하려면 기존의 인증방식대신 Filter을 써서 Jwt 발급, 해석을 해야한다. 전체적인 흐름을 정리하자면 로그인 -> 입력한 Id, PW으로 사용자 조회(database) -> 해당 사용자 정보로 Jwt 발급 -> Jwt를 Co..
Spring에서 등록되는 Bean은 기본적으로 싱글톤 패턴으로 관리를 한다. 때문에 어디에서든 똑같은 Bean을 호출하면 하나의 인스턴스를 조회할 수 있다. 하지만 용도에 따라서 요청할때마다 다른 인스턴스가 필요하게 될때도 있다. 이를 위해서 Spring에서는 Scope를 지원한다. Scope에 들어가기 앞서 싱글톤 패턴과 프로토타입 패턴에 대해 짚어보고 들어가도록 하자 싱글톤 패턴(Singleton pattern) 이란? 어플리케이션이 시작할때 특정 class에 최초 한번만 메모리를 할당하고 해당 메모리 안에서 인스턴스(객체)를 만들어서 사용하는 방법이다. 때문에 어디에서든 항상 동일한 인스턴스를 조회할 수 있다. 싱글톤 패턴의 장점 인스턴스가 단 한번 생성되기 때문에 메모리 낭비를 줄일 수 있다. 전..
트랜잭션(Transaction)이란? 트랜잭션(Transaction)이란 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻한다. 여기에서 상태를 변화시킨다는것은 Query문을 발생시켜 데이터베이스의 데이터를 수정하는것을 의미한다. 예를들어 돈을 송금한다고 하면 계좌에서 돈을 빼고 -> 송금 계좌에 돈을 더하고 -> 기록을 생성 하는 과정을 거친다고 하자. 송금이라는 작업 하나지만 실제로 Update 두번 Insert 한번의 Query가 수행된다. 이러한 작업단위가 하나의 트랜잭션이다. 트랜잭션의 특징 트랜잭션은 크게 4가지로 구분한다. 1. 원자성(Atomicity) 트랜젝션은 데이터베이스에 모두 반영되던가, 전혀 반영되지 않아야 한다. 즉 작업을 수행을 했을때 작업의 일부만 반경되는 현상..