인증 방식 종류(쿠키,세션,토큰)
쿠키 Key, Value형식의 문자열 클라이언트가 웹사이트에 방문할 경우, 그 사이트가 사용하고 있는 서버를 통해 클라이언트 브라우저에 설치되는 작은 기록 정보 파일 각 사용자마다 브라우저에 저장하니 고유 식별이 가능하다. 단점 : 요청 시 쿠키의 값을 그대로 보내기 때문에 유출 및 조작 당할 위험이 존재 세션 쿠키의 보안적 이슈때문에, 비밀번호 등 클라이언트의 민감한 정보를 브라우저 측이 아닌 서버에 저장하고 관리 서버의 메모리에 저장하기도 하고, 서버의 로컬 파일이나...
API, 라이브러리, 프레임워크 정리-2
REST API란? REST API : ‘네트워크’와 ‘웹’에 맞춰진 API 통신 아키텍처 REST를 잘 준수하는 API는 따로 ‘RESTful API’라고 부른다 REST API는 네트워크에서 ‘데이터’를 받아오기 위한 것이고 프로그램에서의 API는 ‘코드’, 나아가 코드뭉치인 라이브러리를 받아오기 위해 쓰는 것이다. 따라서 개발자 입장에서 구분하자면 HTTPRequest를 보내서 JSON 또는 XML 형식으로 데이터 묶음이 온다면 보통 ‘REST API’라고 보면 되고, 그게 아니고 기업에서 설명하는 방식대로 자신의 코드에 import하여 특정 함수나 메소드를...
Swagger
Swagger란? API Spec 문서를 자동화 간단한 설정으로 프로젝트에서 지정한 URL들을 HTML화면으로 확인 1.의존성 추가 build.gradle에 아래 의존성들을 추가한다. implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' 2. 프로젝트에 Swagger 설정 Bean을 등록 @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() // 스웨거가 RestController를 전부 스캔을 한다. .apis(RequestHandlerSelectors.any()) // basePackage => 어디를 범위로 스캔을 할 것인지 작성 .paths(PathSelectors.any()) .build() .apiInfo(apiInfo()); } private ApiInfo...
세션클러스터링 설정을 하다가 생긴 일.(이중화란?)
세션클러스터링 설정을 하다가…. 현재 서버구성은 L4 - 로드밸런싱 알고리즘은 라운드 로빈 방식으로 되어 있고 웹서버2대(nginx) , WAS 2대(Tomcat) , DB(2개) - RAC 이중화로 구성을 한 상태이다. 로그인했을시 문제가 있어서 세션클러스터링 설정을 하고 있는데 몇줄만 추가를 해주면 될거 같았지만…. 생각처럼 금방 되진 않았고, 서버쪽 담당자님께서 이중화는 되어 있으니 세션클러스터링은 생각보다 시간이 걸리니 세션클러스터링 설정하지말고 Active-Stand by로 하자고 제안을 하셨다. 운영하는 사람들만 사용하는 시스템이다보니 많이 사용자가 많지...
JPA를 사용하는 이유
JPA ( Java Persistence API ) 자바 영속성 API 자바 진영의 ORM 기술 표준 (Object-Relational Mapping) ORM 프레임워크는 객체와 관계형 데이터베이스를 매핑한다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임(틀,체계)의 불일치 문제를 개발자 대신 해결해준다. ORM 프레임워크 : 하이버네이트 프레임워크가 가장 대중적이다. 하이버네이트를 사용하기 위해 필요한 lib => Maven jar.(dependency 추가) SQL에 의존적인 개발 회원 객체를 관리하는 MemberDAO(DAO : Data Access Object,데이터 접근 계층) 완성하고 기능 개발...
SID, ServiceName
운영서버 세팅을하다가 운영DB 접속을 하는데 에러가 계속 나서 찾아보니 SID와 SERVICE NAME에 대한 오류였다….. SID와 SERVICE NAME 차이가 뭔지 잘 몰라서.. 정리를 해봤다. SID SID는 INSTANCE의 유니크한 이름. SID = DB 하나의 인스턴스 Service Name Service Name = 여러개의 인스턴스를 모아 하나의 서버 혹은 시스템을 구성한것 정리 DB 서버 한대에 인스턴스를 여러개 생성해서 PEMDM1 , PEMDM2 로 각각 생성했다. 그러면 각각 인스턴스는 PEMDM1, PEMDM2 라는...
Server
이번에 운영환경을 세팅하면서 헷갈렸던 용어나 새롭게 알게된 용어에 대해서 정리를 해봤다. Server 보통 서버라고 하면 웹서버와 웹 애플리케이션 서버 (WAS) 로 나누어진다. 이렇게 웹서버와 WAS로 나누어서 사용하는 이유는 효율성 때문이다. 웹 서버는 정적인 컨텐츠를 처리하며, WAS는 주로 동적인 컨텐츠 처리를 한다. L4 스위치 Layer 4 Switch의 약자로써, L4 스위치는 로드밸런싱(서버 부하 분산)을 처리하는 장비이다. 외부에서 들어오는 모든 요청은 서버가 아닌 L4 스위치를 거쳐야 하며 모든...
오라클 데이터값 오늘 날짜 조회
오라클 데이터값 오늘 날짜 조회 변경일은 DATE 형식이고 컬럼명은 LASTUPDATE_TIME 오늘 변경된 값만 조회하고 싶을 때, SELECT * FROM USER_TABLE WHERE TO_CHAR(LASTUPDATE_TIME,'YYYYMMDD') = TO_CHAR(SYSDATE,'YYYYMMDD') (조회해야하는데 생각이 안나서 적어놈)
언더바 표기법에서 카멜케이스로 변환
JdbcUtils.convertUnderscoreNameToPropertyName(String name) 프로젝트 연동테스트 진행 중에 Kafka SUB 관련해서 안되는 문제발생함... 원인은 카멜케이스로 보내줘야 deserialization가 된다고 한다. ( Deserialization - 역직렬화라는데 나중에 자세히 찾아보자.. ) 어쨌든 현재 우리는 언더파 표기법으로 Kafka에 PUB을 해주고 있었고 이게 잘못되어서 SUB중 deserialization가 실패하고 있었다.. 그래서 언더바표기법을 카멜케이스로 변환시켜주는 로직을 직접 구현하려고 했는데 혹시 몰라서 찾아보니 JdbcUtils.convertUnderscoreNameToPropertyName라는게 있었다..! JdbcUtils.convertUnderscoreNameToPropertyName(String name)을 호출하면 USER_NAME ==> userName 으로 반환해준다.
JPA Auditing
JPA Auditing이란? Audit은 감시하다, 감사하다라는 뜻으로 Spring Data JPA에서 시간을 자동으로 넣어주는 기능 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데, audit을 이용하면 자동으로 시간을 매핑하여 DB에 넣어준다. JPA Auditing 테스트 코드 BaseTimeEntity.java @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity { @CreatedDate private LocalDateTime createDate; @LastModifiedDate private LocalDateTime modifiedDate; } Posts.java @Getter @NoArgsConstructor @Entity public class Posts...
[Spring Boot] Cause: invalid source release: 11 에러 발생
Cause: invalid source release: 11 에러 발생 start.spring.io에서 자바 버젼을 11로 하고 배포 툴을 gradle로 설정 후 로컬에 셋팅 후 실행시 발생. 원인 gradle의 jvm설정이 11 이하 버젼인데 bulid.gradle에 sourceCompatibility의 설정이 11로 되어 있어서 발생. 해결 sourceCompatibility 값을 gradle의 설정 jvm값으로 변경. gradle jvm설정을 11로 올린다. setting -> build, excution, deployment -> bulid tools -> maven -> gradle -> gradle projects -> gradle jvm 에서...
Framework , Library , API
Framework , Library , API ? 프로젝트나 IT공부를 하다보면 Framework , Library , API 라는 용어가 계속해서 나온다. 한번 정리가 필요할 것 같아서 이번에 정리를 해봤다. Framework (프레임 워크) 프레임 워크는 개발자에게 일정 요소들과 틀(규칙, 규약)을 제공하여 특정 프로그램을 개발. 단어 뜻 그대로 뼈대. 개발자가 이 어느 정도의 뼈대를 제공받아 그 안에서 일관성, 생산성, 통합성을 늘릴 수 있다. 프레임 워크를 특정 프로그램을 만들기 위해서 상호...
property , yml
property , yml 프로젝트에 외부에서 특정 값들을 받아야 하는 경우가 있다. AWS나 외부 API를 사용하기 위한 secret key, API key가 이에 해당한다. 이러한 값들을 하드코딩하는 경우에는 보안에 취약하다. 따라서 이런 중요한 값들을 application.properties 또는 application.yml 의 외부 설정값을 관리하는 파일에 기록하여 사용한다. 즉, 두 파일 모두 외부 설정값 등을 관리하는 파일이다 외부 설정값을 관리하는 파일. 우선권은 properties가 먼저 갖고 있다. application.properties Spring boot 애플리케이션 프로젝트에서...
Maven, Gradle
Maven 장점 및 특징 자바 전용 프로젝트 라이프사이클 관리 목적 빌드 도구이며 Apache Ant 불편함을 해결하려고 만들어졌음. pom.xml을 이용한 정형화된 빌드 시스템(필요한 라이브러리를 정의해 놓으면 알아서 네트워크를 통하여 자동으로 다운받아줌) 간단한 설정을 통한 배포 관리 가능 Maven 설정파일 setting.xml 메이븐을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드 하는위치(로컬저장소)의 기본 설정 'USER_HOME/.m2/repository' 인데 settings.xml의 에 원하는 로컬 저장소의 경로를 지정, 변경가능...
Optional 클래스
람다, 메서드 참조, Optional 클래스 소스분석을 하다가 Optional <CustDTO> ... CustDTO custDto = custEntity.map(custMapper::toCustDTO).orElse(null); 라는 소스를 봤는데 Optional, 세미콜론 두개와 map이라는 메소드.. 모르는것 투성이... 하나씩 검색을 해봤다. Optional 클래스 자바 NPE(NullPointException) 예방 반환 값으로 null을 사용하는 것이 위험하기 때문에 등장한 것이 Optional Optional는 null이 될 수도 있는 객체을 감싸고 있는 일종의 래퍼 클래스 Optional을 제대로 사용하기 위해서는 Stream처럼 사용해야 한다. Stream : 람다를 활용할 수...