Time does not change us. It just unfolds us.

Web 30

log4j 취약점

https://news.naver.com/main/read.naver?mode=LSD&mid=sec&sid1=105&oid=029&aid=0002710894 IT기업들 `로그4j` 헬프데스크 가동 LG CNS·더존비즈온 동시 대응 해커 공격대비해 비상근무체제 보안워룸… 고객 문의사항 답변 유사한 보안 이슈 발생도 서비스 LG CNS, 더존비즈온 등 IT기업들이 최근 치명적인 보안 취약점이 발견 news.naver.com 현재 log4j의 취약점때문에 얘기가 많았다. 우리 프로젝트도 2.16.0으로 버전을 변경하여 다시 배포하였다. 취약점의 원인은 아래 나무위키의 내용을 참고하여 이해하였다. https://namu.wiki/w/Log4j%20%EB%B3%B4%EC%95%88%20%EC%B7%A8%EC%95..

Web/Else 2021.12.20

[SpringBoot]Logging과 Log Level

로깅(Logging)이란 시스템 동작시 시스템의 상태와 작동 정보를 시간의 경과에 따라 기록하는 것, 그리고 그 기록을 로그(Log)라고 한다. 상황별 Level 지정하여 Level별 메시지를 선택 가능 응용 프로그램의 실행에 대한 흐름과 에러 확인 가능 프레임워크를 이용하여 간단하고 쉬운 사용 환경 조성 기능 모듈 별로 유연하게 메세지 출력 가능 자유로운 출력 위치 및 다양한 출력 형식 지원 로깅 관련 프레임 워크 : logback, log4j, logback, log4j2 , slf4j이 있다. log4j2 동일한 쓰레드 기준으로 Log4j2 처리량이 Log4j1 혹은 Logback 보다 월등한 차이를 가지고 성능을 나타냄 log4j2는 slf4j의 구현체 dependency 추가 org.bgee.l..

Web/Spring Boot 2021.11.25

[JPA]객체지향 쿼리

QueryDSL은 써볼 기회는 없었지만 JPQL을 직접사용하거나 JPA Criteria로 처리하는 것보다 실무에서 훨씬 유지보수에 유리하다고 들어 용어만 이해하고 넘어가려 한다. 같은 강사님의 강의를 들은 분이 정리한 QueryDSL 사용법과 실무 경험 공유 내용을 시간될 때 참고해야겠다. https://ict-nroo.tistory.com/117 [JPA] Spring Data JPA와 QueryDSL 이해, 실무 경험 공유 Spring Data JPA와 QueryDSL JPA 기반 프로젝트 Spring Data JPA QueryDSL Spring Data JPA 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결 개발자는 인터페이스만 작성한다 스프링 데이터 JPA가 구현 객체.. ict-nroo...

Web/JPA 2021.11.25

[Spring]@Autowired

@Autowired @Autowired를 이용하면 필요한 의존 객체의 “타입"에 해당하는 Bean을 찾아 주입한다. (의존성 : 하나의 객체 내에서 필요에 의해 다른 객체를 사용해야 할 경우 사용하는 것 의미) DI(Dependency Injection = 의존성 주입)은 Spring의 특성으로 하나의 객체 내에서 필요에 의해 다른 객체를 생성자 또는 Setter를 통해 주입시키는 것을 의미한다. @Autowired annotation을 통해 "인터페이스를 선언한 변수에 자동적으로 그 인터페이스를 재정의한 객체를 주입시킨다." 생성자 setter 필드 위의 3가지의 경우에 Autowired를 사용할 수 있다. 그리고 Autowired는 기본값이 true이기 때문에 의존성 주입을 할 대상을 찾지 못한다면 ..

Web/Spring Boot 2021.11.24

[JPA]Transcation, 영속성Context, EntityManager

강의를 듣고 Repository에 대한 단위 테스트를 진행하면서 "EntityManager.persist(member) 하여도 insert문 안나가고 DB transaction commit 할 때 query가 나갑니다." 라는 설명을 듣고 개념들을 하나씩 찾아보기로 했다. @Transaction 데이터베이스에서 논리적 상태 변화, 즉 Insert, Update, Delete로 데이터베이스의 데이터가 변화가 있는 것을 트랜잭션(transaction)이라고 한다. Transcation은 Transaction은 2개 이상의 쿼리를 하나의 커넥션으로 묶어 DB에 전송(commit)하고, 이 과정에서 에러가 발생할 경우 자동으로 모든 과정을 원래대로 되돌려 놓는다.(rollback) 이러한 과정을 구현하기 위해 ..

Web/JPA 2021.11.23

[JPA]JPQL(Java Persistence Query Language)

JPA를 공부하면서 JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어를 제공한다는 것을 알게 되었다. JPA은 table 대상인 SQL과 달리 Entity 객체를 중심으로 개발하므로 Entity 대상으로 Query를 작성​한다고 한다. JPQL과 SQL 차이점 JPQL은 엔티티 객체를 대상으로 쿼리한다. SQL은 데이터베이스 테이블을 대상으로 쿼리한다. 그 외 특징들 엔티티 객체를 조회하는 객체지향 쿼리 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음 JPA는 JPQL을 분석한 후 적절한 SQL을 만들어 데이터베이스를 조회 방언(Dialect)만 변경하면 JPQL을 수정하지 않고 자연스럽게 DB 변경 가능 JPQL 문법의 전체 구조는 SQL과 유사 아래와 같이 Entity 이름과 ..

Web/JPA 2021.11.22

[JPA]Annotation 정리

아래와 같은 table을 작성하기 위해 entity 개발을 하면 사용된 annotation을 정리하고자 한다. @Entity 데이터베이스 테이블과 일대일로 매칭되는 객체 단위로, Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미한다. 객체의 인스턴스를 구분하기 위한 유일한 키값을 가지는데 테이블 상의 Primary Key와 같은 의미이다. @Id Entity 클래스 상에 해당 PK를 명시적으로 지정한다. @Column 데이터베이스의 테이블에 잇는 컬럼과 동일하게 1:1로 매칭되기 때문에 Entity 클래스 안에 내부변수로 정의된다. 별다른 옵션을 설정하지 않는다면 생략이 가능하다. 즉 Entity 클래스에 정의된 모든 내부변수는 기본적으로 @Column 어노테이션을 포함한다고 본다...

Web/JPA 2021.11.18

[Maven]빌드하여 jar 파일 만들기

아래 Inflearn의 JPA 유료강의를 듣다가 나는 gradle이 아닌 maven을 이용하여 따라해보고자 build 방법을 기록해둔다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/lecture/24279?tab=curriculum&speed=1.25 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 학습 페이지 지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요.... www.inflearn.com 1. Maven 설치 http://maven.apache.org/download.cgi Maven – Dow..

Web/Else 2021.11.16

[Web]HttpSessionListener, AtomicInteger

HttpSessionListener를 이용해 중복로그인을 방지할 수 있는데, 이번 프로젝트에는 HttpSessionListener를 통해 session 만료 시간이 되면 WebSocket을 통해 message를 전달하여 자동 로그아웃시키는 기능을 구현하였다. HttpSessionListener의 객체는 Session이 생성되거나 제거될 때 발생하는 이벤트를 제공해주어 등록만해주면 세션을 통제할 수 있다. @WebListener //@RequiredArgsConstructor public class SessionConfig implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent hse) { //세션 생성시 ..

Web/Else 2021.11.15

[Web]Token 기반 인증

지난 Feign Client 공부에 이어서 HeaderCoonfiguration을 왜 설정해주는지 이해하기 위해 공부하다가 session과 token 기반의 인증 특징들에 대해 알게되었다. https://x-ojm.tistory.com/12?category=978307 [Web]Feign Client 이번 프로젝트에서 FeignClient를 이용하여 개발해서 개념을 이해하고자 공부해보았다. 특히 공통 헤더를 추가하기 위해 커스터마이즈한 Configuration을 설정하는 부분에 대해 정리하였다. Feign Client x-ojm.tistory.com 기존 RestTemplate을 적용하여 Client.java를 구현하였을 때는 함수 내 header에 직접 token을 넣어 작성했는데, FeignClien..

Web/Else 2021.11.11

[Web]Maven LifeCycle

Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함하고 있다. 프로젝트의 빌드(Build)를 자동화해 주는 빌드 툴로서 컴파일하고 패키징하여 배포까지 자동으로 해주는 도구이다. Maven에서 제공하는 build 단계(LifeCycle)이 존재하며, 메이븐에 내장된 라이프사이클은 default, clean, site 3가지가 있다. * 라이프 사이클 mvn process-resources : resources:resources의 실행으로 resource 디렉토리에 있는 내용을 target/classes로 복사한다. mvn compile : compiler:compile의 실행으로 src/java 밑의 모든 자바 소스를 컴파일해서 target/classes로 복사 ..

Web/Else 2021.11.04

[Web]multipart/form-data

프로젝트를 진행하면서 view에서 controller로 deb, tar, jpg 등의 파일을 보내주는 경우가 굉장히 많았다. 처음에는 임시로 String으로 이름만 받다가 서버 쪽에 전송을 해야하여 multipart/form-data를 이용하였다. 내가 작성한 소스를 먼저 살펴보고 개념을 하나씩 정리해 봐야겠다. .ftl 파일 설치 Modal DT 설치 파일 설치 파일을 첨부하세요. 저장 닫기 .js 파일 var form = $('#install_form')[0]; var data = new FormData(form); $.ajax({ type: "PUT", enctype: 'multipart/form-data', url: "/install", data: data, processData: false, c..

Web/Else 2021.10.28

[JavaScript]IP input mask

IP를 입력받을 때 'xxx.xxx.xxx.xxx'의 형식만 입력이 가능하게 하였다. 이 때 사용한 것이 미리 정의된 형식을 보장하여 사용자가 입력을 할 수 있도록 도와주는 inputmask 라이브러리이다. input mask는 그 외 날짜, 숫자, 전화번호 등의 입력하는데에 유용하다. 1. 내가 사용한 코드는 다음과 같다. $("#ip").inputmask({alias: "ip", greedy: false}); ... $("#ip").inputmask('remove'); 2. 다른 방식의 코드 IP Address //input mask bundle ip address var ipv4_address = $('#ipv4'); ipv4_address.inputmask({ alias: "ip", greedy:..

Web/Front 2021.10.28

[Spring Boot]Docker-compose

docker-compose란 Docker에서 사용하는 컨테이너 공간을 한 곳에서 관리하기 위한 도구이다. yml파일로 작성하며, docker-compose명령어를 활용하여 여러 개의 컨테이너를 한 번에 관리한다. 장점으로는 1. Multiple isolated environments on a single host docker 자체가 isolated environment에서 동작하며 docker-compose가 여러 docker를 한 번에 실행시키는 것을 고려해보면, 당연한 장점 아닌 장점이다. 2. Preserve volume data when containers are created 볼륨을 보존한다. 이 말은 즉, 기존 컨테이너에 의해 관리되는 volume이 있을 때 새로운 컨테이너가 기존 컨테이너가 ..

Web/Spring Boot 2021.10.27

[Spring Boot]Docker 이미지 빌드

이번 진행했었던 과제에 maven 플러그인을 사용하여 Spring Boot 애플리케이션을 Docker 이미지로 배포하는 내용이 포함되어 있었는데, 소스를 조금 이해하고자 빌드 환경을 공부하려 한다. 그 전에 Docker를 왜 쓰는지 와닿지 않아서 찾아봤는데 인프런에 잘 설명해준 영상이 있어 함께 포스팅한다. 정말 너~무 너무 잘 나와있어서 감사하다. 제목도 딱 내가 하고 싶던 질문(왜 굳이 도커를 써야하나요?)ㅋㅋㅋㅋㅋㅋ 시간되면 강의도 들어봐야지. https://youtu.be/3FcFL2C3ME8 https://www.44bits.io/ko/post/why-should-i-use-docker-container#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0-%EC%99%9C-%EB%..

Web/Spring Boot 2021.10.27

[Web]Custom Validator

자바스크립트에서 input 값에 영문,숫자,특수문자 입력만 허용하려고 validation을 작성할 때 사용했던 내용이다. formValidation을 사용하는데 문서 외에는 구글링해도 잘안나온다^___^… name: { validators: { notEmpty: { message: '아무거나 입력하세요.', trim: true }, regexp: { regexp: /^[A-Za-z0-9]*$/, message: '영문, 숫자만 입력해야합니다.' } } } 위 코드와 같이 regexp를 사용할 수도 있지만 커스텀 validator를 만들면 이렇게 정의할 수 있다. var alphabets = /^[a-zA-Z0-9,/,~,!,@,#,$,%,^,&,*,\-,_,+,=,?,>,

Web/Front 2021.10.26

[Web]Freemarker문법

템플릿 엔진으로 Freemarker를 사용하는데 view 내에서의 문법들이 가끔 쓰이고 있어 시간내어 찾아보았다. 문서의 Reference 장 참고하면 문법 확인 가능한데, 특히 #assign이나 반복문, 조건문 위주로 많이 사용하고 있다. https://freemarker.apache.org/docs/ref.html Template Language Reference freemarker.apache.org freemarker는 자바 객체에서 데이터를 생성해서 템플릿에 넣어주면 freemarker에서 템플릿에 맞게 변환하여 HTML 파일을 생성한다. 다른언어도 쓸 수 있지만, JVM 위에서 돌아가므로 주로 자바 서블릿에서 많이 쓴다. Java EE에 종속적이라는 JSP단점을 극복했으며 Thymeleaf나 ..

Web/Front 2021.10.26