하루 2시간
본문 바로가기
728x90
Java Bean? Spring Bean? Bean 이란 반복적으로 코드를 따로 작성하여 재사용하기 위해 만들어진 클래스 빈은 속성과 메서드로 이루어져 있으며, 데이터의 처리를 담당 Java Bean의 정의 데이터를 표현하는 것을 목적으로 하는 자바 클래스( JavaBean 규격서에 따라 작성 ) 컴포넌트와 비슷한 의미로도 사용 DTO 혹은 VO의 형태가 Java Bean이라고 생각하면 쉽다. Java Bean 필드는 private로 구성되어 getter와 setter를 통해서만 접근할 수 있고, 전달 인자가 없는 생성자를 가지는 형태의 클래스이다. 모든 필드는 private로 getter/setter를 통해서만 접근 가능 public class Bean_ClassName [ implements java.io.Serializable ] { pri.. 2022. 4. 29.
레거시란 과거로부터 물려 내려온 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등으로 새로이 대체가 가능한 기존의 기술 2022. 4. 26.
Spring DI 종류 1. 생성자 주입 생성자에 파라미터를 만들어두고 이를 통해 DI 컨테이너가 의존할 오브젝트 레퍼런스를 넘겨주는 방식 // PicoContainer class MovieLister... public MovieLister(MovieFinder finder) { this.finder = finder; } ​ class ColonMovieFinder... public ColonMovieFinder(String filename) { this.filename = filename; } 무의식 중에 가장 많이 쓰는 주입 방식 객체 생성시 필수로 생성자가 실행되기 때문에, 필드 주입과 달리 참조 관계를 눈으로 쉽게 확인할 수 있다. 2. Setter 주입 의존성을 입력받는 세터 메소드를 만들고 이를 통해 의존성을 주입 .. 2022. 4. 22.
Spring IoC, DI 가 무엇인지 IoC(Inversion of Control) : 제어가 반대로 간다는 개념 IoC는 Spring 에서만 사용되는 개념이 아니며, 프로그래밍 패턴이기 때문에 범용적으로 쓰이며 작게는 객체간에 디자인 패턴으로 크게는 컨테이너, 프레임워크 역활에 적합한 구조이기 때문에 상황에 맞게 사용되는 프로그래밍 모델이다. "IoC : 제어의 역전" 이라는 의미는 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다. 즉, IoC는 객체 생명 관리, 흐름 제어를 제 3자에게 위임하는 프로그래밍 모델이다. 일반적으로 자바 프로그램은 main() 메소드에서 시작해서 개발자가 미리 정한 순서를 따라 객체가 생성되곡 실행된다. 그런데 서블릿은 배포하고 나서 개발자가 직접 제어할 .. 2022. 4. 19.
JWT-사전지식-RSA-암호화 RSA암호화를 알기전에 RSA란 비대칭키 알고리즘의 대표적인 알고리즘이다.즉, RSA 암호화는 RSA 알고리즘을 이용한 암호화이다 대칭키 암호화 위 이미지와 같이 같은 key로 암호화 복호하 하는 것을 뜻한다. 비대칭키 암호화 비대칭키 암호화는 암호화하는 key와 복호하하는 key의 값이 다르다. 값이 다른데 어떻게 암호화,복호화가 가능한지는 RSA 알고리즘을 이해하면 된다. RSA 알고리즘을 통해 Public Key (공개키), Private Key (개인키)를 사용해 암호화를 한다. Reference : Twilio RSA 암호화를 사용하는 이유 기밀성 (인가된 사용자 인가) Bob's 공개키로 문서를 암호화 하면 Bob's 개인키로만 그 문서를 복호하 할 수 있다. 무결성 (누가 보냈는가) Bob'.. 2022. 4. 15.
미들웨어란? 미들웨어는 운영 체제와 해당 운영 체제에서 실행되는 응용 프로그램 사이에 존재하는 소프트웨어 (OS와 SW Application 사이) 즉, 분산 컴퓨팅 환경에서 응용 프로그램과 프로그램이 운영되는 환경 간에 원만한 통신이 이루어질 수 있도록 제어해주는 소프트웨어이다. 대표적인 미들웨어는 WAS가 있다. 기본적으로 숨겨진 변환 계층으로 기능하는 미들웨어는 분산 응용 프로그램의 통신 및 데이터 관리를 가능하게 합니다. 데이터와 데이터베이스가 "파이프" 사이를 쉽게 통과할 수 있도록 두 가지 응용 프로그램을 함께 연결하기 때문에 배관이라고도 합니다. 미들웨어를 사용하면 사용자가 웹 브라우저에서 양식을 제출하거나 웹 서버가 사용자의 프로필을 기반으로 동적 웹 페이지를 반환하도록 요청할 수 있습니다. 일반적인 .. 2022. 4. 12.
JWT-사전지식-CIA CIA란 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability) 기밀성 인가된 사용자만 정보에 접근할 수 있는 것 대처 방안 - 암호화 기밀성을 보장하기 위해 각종 접근통제를 실시하고 전산 자료에 대한 암호화 대책을 강구해야 한다. 공격 예시 스니핑, 스푸핑 무결성 정보에 대해서 허가된 사용자 또는 대상에 대해서만 수정 및 삭제등 가능해야 한다. 만약 수정 및 삭제가 허가되지 않은 사용자에 의해 이뤄진다면 해당 정보에 대해서는 무결성이 깨졌다고 한다. 대처 방안 - 누가 보냈는지(변조, 파괴 예방) 무결성을 확보하기 위해서는 접근 통제가 필요하며, 정보의 변경, 변경 위험이 있을 때 즉시 감시 및 복구 가 가능 매커니즘이 필요하다. 무결성을 확인하는 가장 대표.. 2022. 4. 8.
JWT-사전지식-TCP/IP TCP 는 통신 OSI 7계층 전송 계층(트랜스 포트) 계층에서 나오는 개념으로 데이터(요청)를 전송하는 방식 중 하나이다. OSI 7계층 응용 계층 : 무엇을 표현 계층 : 암호화 세션 계층 : 인증 체크 전송 계층(트랜스 포트) : TCP / UDP 네트워크 계층 : IP 데이터 링크 계층 : Port 물리 계층 : LAN, WIFI TCP / UDP TCP A가 B에게 요청 1을 보내면 B는 잘 받았다고 ACK를 보낸다. B가 ACK를 보낼 때 ACK가 유실 또는 통신의 불안정으로 ACK가 A에게 가지 않을 수 있다. ACK를 받지 못한 A는 한번 더 요청을 보냅니다. ACK를 받은 경우에만 다음 요청을 보내게 됩니다. 그래서 신뢰성을 가지고 있는 통신 기법중 하나이다. UDP A가 B에게 요청(데.. 2022. 4. 5.
JWT-Token-구조 JWT란 JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 자체 포함된 방법을 정의하는 개방형 표준( RFC 7519 )입니다. 이 정보는 디지털 서명되어 있으므로 확인하고 신뢰할 수 있습니다. JWT는 비밀( HMAC 알고리즘 사용)을 사용하거나 RSA 또는 ECDSA 를 사용하는 공개/개인 키 쌍을 사용하여 서명할 수 있습니다 . 서명* 된 토큰 에 중점을 둘 것!! https://jwt.io/introduction JWT 구조 위와 같이 ( . ) 을 기준으로 3가지로 나눠지는데 이 3가지 부분을 각각 JOSE 헤더(JSON Object Signing and Encryption), JWT Claim Set, Signature라고 부른다. Ref.. 2022. 4. 1.
JWT-Token-왜-사용하는가 왜 사용하는가 사용자 인증을 위해 사용된다. Session vs JWT 일단 세션과 JWT토큰(이하 토큰)을 비교했을 때 토큰을 사용했을 때 오는 이점은 서버가 stateless 상태가 된다. stateless 의 장점은 서버와 클라이언트의 연결된 부분이 없어서 서버의 확장이 수월해진다. stateful 같은 경우 세션을 따로 저장해야 하기 때문이다. 장점 유효한 사용자라는 자체 인증 권한을 가진다. 액세스키 사용 시 DB조회 없이 인증 정보 사용할 수 있다. 유효한 권한을 가진다는 부분은 payload 에 넣을 수 있다.(단, 헤더 크기가 증가한다.) 단점 인증은 쉽지만, 인가 부분을 자체 인증을 구현하기엔 어려워 보인다. 인증정보만으로 서비스가 어려운 경우(작업에서 어떤 권한을 가지고 있나가 중요한 .. 2022. 3. 29.
[Java] 전역(glpbal)변수, 정적(static)변수 *전역 (global) 변수 * class 안의 전체영역에서 사용하는 변수 전역변수 값은 new 를 만나면 초기화 되는데, 최기화 되지 않는 값을 유지하려면 static 변수를 사용하면 된다. 라이프 타임 : 프로그램이 끝날때까지 scope가 없는 곳에서 "int g_test" 선언 다른 파일에서 사용하기 위해서는(다른 파일에서 해당 변수 접근 가능) (C/C++ 에서 가능, JAVA는 불가능) "extern int g_test" 이런식으로 선언하고 사용한다.( 다른 파일의 전역변수를 가져다 사용하는 것은 좋은 방법이 아니다. ) 정적 (static) 변수 : 여러 인스턴스가 공유해서 사용할 수 있는 변수 각 인스턴스는 같은 클래스 기반으로 생성되지만 각각 차지하는 메모리의 공간이 다른 개별 객체로 여기.. 2022. 3. 25.
Spring-JPA-hibernate.naming JPA를 적용하고 나서 Entity 생성 시 변수 명을 그대로 매핑 안하고 언더바 형식 카멜을(UserName => user_name) 으로 자동 매핑해준다. 이 부분을 변수 명과 DB칼럼명을 그대로 매핑 하려면 application.properties 에 추가해주면 된다. spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl application.yml 경우 jpa: hibernate: ddl-auto: none naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategy.. 2022. 3. 22.
Filtet vs Interceptor 모든 컨트롤러에 로그인 여부를 확인하는 코드를 짜야하는 상황이라 코드의 중복이 많아지고 로그인 로직이 바뀌면 복잡해진다. 이러한 여러 로직에서의 공통 관심이 있는 것을 cross-cutting concern(공통 관심사) 라고 한다. 서블릿 필터 life cycle HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 필터체인: HTTP 요청 -> WAS -> 필터1 -> 필터2 -> 서블릿 -> 컨트롤러 필터 -> 서블릿 //인증된 사용자 필터 ->(서블릿 호출 x) //비 인증 사용자 스프링 인터셉터 life cycle HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 필터체인: HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 인터셉터1 -> 인터.. 2022. 3. 18.
[Java] 리플렉션 리플렉션이란 리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API 왜 사용하는가 자바는 정적 언어로 동적인 문제를 해결하기 위해 사용한다. 정적 언어 vs 동적 언어 정적 언어: 컴파일 시점에 타입을 결정 동적 언어: 런타임 시점에 타입을 결정 대표적인 사용 스프링의 DI(dependency injection), ModelMapper 등 리플렉션은 어플리케이션 개발보다 프레임워크 및 라이브러리에서 많이 사용된다. 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실행해야 하는 경우( intelliJ 의 자동완성) 2022. 3. 15.
server-토큰 기반 인증, 서버 기반 인증(JSON Web Token VS Session,Cookie) 서버 기반 인증 서버 측에서 사용자들의 정보를 기억하고 있어야한다. 정보를 기억하기 위해서 세션을 유지해야하는데, 이를 메모리나 디스크 또는 데이터베이스 등을 통해 관리한다. 서버 기반의 인증 시스템은 클라이언트로부터 요청을 받으면, 클라이언트의 상태를 계속해서 유지하며 서비스를 이용한다. 이러한 상태를 Stateful 서버(상태) 라고 한다. 특징 HTTP 프로토콜 요청에 따른 응답을 받으면 연결이 끊어진다. 통신이 종료되면 상태 정보가 남지 않아 Stateful 상태에서 Stateless 상태로 바뀐다. 단점 CORS(Cross-Origin Resource Sharing) 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 여러 도메인에서 관리하기 번거롭다. 확장성이 떨어진다. 서버를 확장하.. 2022. 3. 11.
Mac OS-포트 확인 및 죽이기 포트 확인 lsof -i :"포트 번호" ~ 번 포트를 사용중인 프로세스를 죽일 경우 sudo kill -9 "프로세스 번호" http://iyk2h.io/ 2022. 3. 8.
spring-boot, react, axios 사용시 Cors, session, cookie 문제 Spring-boot로 rest형식의 api를 구현하였고, React로 구현된 Client와 연결하는 작업중에 발생한 이슈이다. 구글링해서 찾은 3가지 방법 시도 1. spirn-boot에서 CORS 설정 -> 값 주고 받기 성공 (session 값은 가져오지 못한다.) (Cross-Origin Resource Sharing,CORS)란 다른 출처의 자원을 공유할 수 있도록 설정하는 권한 체제 즉, CORS 를 설정하지 않거나 잘못 설정하는 경우, 리소스를 공유하지 못한다. config.WebConfig.java 설정 package com.example.booking_service_01.config; import org.springframework.context.annotation.Configuratio.. 2022. 3. 4.
Linux2 OS- 쉘 스크립트 cd 명령어 사용 shell script 상에서 실행 되는 로직은 sub shell에서 동작 한다. 그래서 쉘이 동작중에만 이동한다. 즉 쉘 스크립트 안에서 디렉토리를 이동해서 작업이 하능하다. 하지만 스크립트가 끝나면 스크립트 시작한 디렉토리로 돌아온다. 스크립트가 끝이나고 디렉토리를 이동하려면./script.sh 대신 source script.sh 을 사용하여 스크립트를 실행하면 된다. 2022. 3. 1.
Spring boot Rebuild없이 정적소스(HTML,CSS,js) 적용방법 devtools 라이브러리 의존성 추가 maven org.springframework.boot spring-boot-devtools 2.0.4.RELEASE Gradle compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.0.4.RELEASE' application 옵션 추가 application.yml spring: devtools: livereload: enabled: true freemarker: cache: false thymeleaf: cache: false application.properties spring.devtools.livereload.enabled=true spring.freemark.. 2022. 2. 25.
Linux2 OS-포트 확인 및 죽이기 리눅스 열린 포트 확인, 오픈된 포트 확인 netstat -tnlp 20001 번 포트를 사용중인 프로세스를 죽일 경우 fuser -k 20001/tcp 포트 검색으로 프로세스 아이디 가져오기 netstat -tnlp|grep 20001 여기서 20001 이 찾고자 하는 포트번호 해당 프로세스 죽이기 kill -9 1234 1234가 1번 과정을 통해 찾은 PID(프로세스 아이디) 이런식으로 작성했는데, 매번 두번씩 shell을 입력하는게 귀찮았다. 그래서 “음? 그러면 두개를 하나로 붙이면 좋겠다!” 라고 생각했다. gawk를 사용해서 netstat의 결과에서 프로세스를 가져온 후 kill 명령어에 넘겨줬다. kill -9netstat -tnlp|grep 20001|gawk '{ print $7 }'|.. 2022. 2. 22.
MacOS) ssh 접속시 한글 깨짐 해결 원인 Mac이 영어로 설정되어 있었고, 터미널이 자동으로 컴퓨터의 Locale을 전송하도록 설정되어 있었기 때문 해결방안 사용하는 터미널 프로그램의 locale 자동 전송 설정을 해제 iTerm: preference -> Profiles -> Terminal 탭의 Environment의 set locale variables automatically 체크 해제 terminal: preference -> Profiles -> Advanced탭의 International의 Set locale invironment variables on startup 체크 해제 2022. 2. 18.
Linux2 OS-hostname 변경 [ec2-user@before-host-name] $ hostname before-host-name.internal [ec2-user@before-host-name] $ cat /etc/hostname before-host-name.internal [ec2-user@before-host-name] $ sudo hostnamectl set-hostname new-host-name [ec2-user@before-host-name] $ cat /etc/hostname new-host-name [ec2-user@before-host-name] $ sudo reboot [ec2-user@new-host-name ~] $ Linux2 OS 에서 hostnamectl set-hostname 명령어를 사용해 hostn.. 2022. 2. 15.
동기(Synchronous), 비동기(Asynchronous), 블록킹(Blocking),논블록킹(Non-Blocking) Reference - https://poiemaweb.com/js-async 동기 비동기 차이 동기는 요청 후 결과를 받을 때까지 다른 일을 하지 못한다. 비동기는 요청 후 결과를 받을 때까지 다른 일(다른 요청)을 할 수 있다. 동기(Synchronous) - 블록킹(Blocking)방식 동기식 처리는 직렬 적으로 태스크(task)를 수행한다. 즉, 태스크는 순차적으로 실행되며 어떤 작업이 수행 중이면 다음 작업은 블로킹(blocking, 작업 중단) 된다. T1, T2 트렌젝션의 단위를 동시에 맞춘다. 동기식 처리는 T1, T2의 -10000, +10000이 동시에 일어나기 위한 것으로, T1의 전송, T2의 결과 전송 후 동시에 진행 되어야 한다. 트랜젝션을 이용한 동시성 제어를 하기때문에 설계가 .. 2022. 2. 11.
신선한 충격 인프런 장애 회고 최근에 인프런 강의를 듣다 인프런 알림이 와 있어 확인해보니 장애 후기를 남겼다는 알림이 있었다. 장애가 일어난 이유는 100% 할인 이벤트를 진행했기 때문이다. 난 몰라서 신청하진 못 했지만. :) 장애 부검에 더 대한 궁금한 사람은 아래 링크를 참고하길 바란다. 2022년 1월 100% 할인 이벤트 장애 부검 posted by 향로(HyangLo), February 01, 2022 https://tech.inflab.com/202201-event-postmortem/ 이런 회고를 사용자에게 제공한다는 것은 신선한 경험이었기에 나도 공유하고 싶어 이렇게 공유해봅니다. 회고를 보고 느낀 점은 인프런에 합류해 같이 개발문화를 만들며 서비스를 개선하고 싶은 생각이 들었다. 스프링을 공부하고 있지만 접어두고 .. 2022. 2. 8.
Mac OS) cafe24 ssh 접속 Mac OS에 cafe24 ssh 접속하기 Mac Terminal을 사용한다면 Putty같은 프그램이 필요가 없다. 터미널 실행 후 $ ssh \[아이디\]@\[호스팅이름(도메인)\] > password: FTP 비밀번호 입력 로그인 성공 2022. 2. 4.
데이터 통신 전송매체 전송매체 전기신호의 전송을 위한 전송회선. 실제로 전송하는 물리적인 통로 물리적 도체 기반인 전자기적 또는 관학적 신호를 전송하는 유선매체와 특별한 도채 없이도 전자기적 신호를 송수신하는 무선매체로 나뉜다. 유선매체 장비 간 연결 통로를 제공하는 선 현태의 전송수단 물리적 특성에 따라 트위스티드 페어 케이블, 동축 케이블, 광케이블로 구분된다 트위스티드 페어 케이블 구조 두개 이상의 구리 도선이 꼬아진 모양, 접지선과 신호선을 구분하기 위해 특정 색깔의 플래스틱으로 절연하고 있다. 전송 특성 서로 근접해 있는 두 가닥의 도선에 전기가 통할 경유 전자기적 간섭이 잘생한다. 두 도선을 평행상태로 위치하면 한 선에 흐르는 신호는 다른 선에 간섭을 일으키게 된다. 하지만 두 선이 직각으로 위치하게 되면 두 선이.. 2022. 1. 28.
Oracle 권한 및 역할 권한 허가 - GRANT GRANT Privileges [(Column[,...n]])] [,...] [ON 객체] TO {사용자 | 롤 | PUBLIC [,...n]} [WITH GRANT OPTION] Privileges - 허가할 권한 지정. REFFERNCES는 외래키 제약조건을 생성하기 위한 참조 허가 권한. REFFERNCES(컬럼이름) 형태로 사용 (아래 표 참고) Column - 사용 권한을 부여할 테이블의 열 이름을 지정. 꼭 ()안에 표시. 권한을 허가받은 사용자만이 대상 테이블의 지정된 Column 사용 가능 객체 - 사용 권한을 부여할 객체를 지정. 테이블이나 뷰 등의 이름이 온다. TO 사용자 - 사용자나 권한의 묶음인 ROLE에 권한을 추가할 수 있다. PUBLIC은 모든 사용자.. 2022. 1. 21.
728x90