전체 글 250

[Spring] Spring Boot 로깅 (Logging) 공식 문서 내용 정리

스프링 Log reference 스프링 부트 공식 문서의 Log 부분을 번역하며 정리해보았다. 26.Logging 스프링 부트는 모든 내부로깅을 Commons Logging을 사용하지만 근본적인 로깅 구현은 남겨두었다. Java Util Logging, Log4J2, Logback은 디폴트 설정들을 제공한다. 각각의 경우 로거는 선택적 파일출력과 함께 콘솔 출력을 사용하도록 사전에 구성이 된다. 디폴트로, Starter를 사용을 한다면 Logback이 기본으로 사용된다. Java Util Logging, Commons Logging, Log4J, Slf4J를 모두 사용하는 의존적 라이브러리가 올바르게 작동하도록 적절한 Logback 라우팅이 포함된다. 자바를 사용하는데 많은 로깅 프레임워크들이 있다. 위..

[Spring] Bcrypt를 이용하여 비밀번호를 암호화하여 저장하는 방법 - 실제 프로젝트 적용기

암호화를 이용하여 원문을 해시화하는 간단한 방법을 찾던 중 Devglan 사이트에서 괜찮은 칼럼을 찾았다. https://www.devglan.com/spring-mvc/storing-hashed-password-database-java 다음 내용은 위 칼럼을 번역한 내용이다. 단순 텍스트에 비밀번호를 저장하는 것은 보안상 매우 취약하다. 이 글에서는 자바를 이용하여 데이터베이스에 해시된 패스워드를 저장하는 방법을 다룬다. 이렇게 한다면 BDA들 조차도 실제 패스워드를 빼내기 불가능하다. 기존의 MD5, SHA-1, SHA-2로 패스워드를 해싱할 수도 있지만 솔트를 치는것은 추가적인 보안을 만들 수 있다. (여기서 솔트를 친다는 말은 원문에 추가적인 문자열을 넣어서 해시를 강화한다고 이해하면 된다) 이 ..

[Spring] Spring Interceptor (인터셉터)와 WebTestClient Session (세션) 테스트 적용기

Spring의 인터셉터 사용과 그것을 테스트하는 WebTestClient에 대해서 다뤄보려고 한다. 특히나 로그인 같은 기능을 구현하는 경우 서버측에서 세션을 생성하게 되는데 그것을 어떻게 하면 간단히 테스트할 수 있는지 알아보자. 먼저 인터셉터가 어떻게 작동하는지 그림을 보자. 인터셉터는 요청을 가로채는 역할을 한다. DispatcherServlet 이전에 가로챌것 처럼 보였지만 사실은 그 이후에 요청을 가로챈다. DispatcherServlet 이전의 요청을 거치는 것은 Filter의 역할로 볼 수 있다. 그리고 중요한 점은 인터셉터는 핸들러 이전을 가로채지만 그 이후도 처리할 수 있다는 점이다. (그림을 보면 핸들러 작업 이후 다시 인터셉터로 들어가는 모습을 볼 수 있다. 잠시 후 코드로 내용을 확..

[우아한테크코스] 7주차 후기 - 데이터베이스 설계와 마지막 미션

6/17 (월) 프로그래밍 (체스) - 6/18 (화) 강의 (자바스크립트 기초), 프로그래밍 (체스) 6/19 (수) 프로그래밍 (체스) 6/20 (목) 프로그래밍 (체스) 6/21 (금) 강의 (데이터베이스 설계) 6/22 (토) 외부일정 강의: 데이터베이스 설계 제한된 시간안에 테이블을 설계해야 하는 과제가 있었다. 타임어택으로 차등을 매기거나 그런것은 아니다. 단지 한정된 강의 시간안에 다뤄야 할 것들이 조금은 많았을 뿐이었다. 데이터베이스 설계는 크게 3가지로 나뉘어진다. 개념적 데이터 모델링: 개념 데이터 모델이란 업무 요건을 충족하는 데이터의 주제 영역과 핵심 데이터 집합을 정의하고 관계를 정의한 모델을 의미한다. 즉 큰 그림을 먼저 그리는 것이다. 논리적 데이터 모델링: 개념 데이터 모델링..

[Java] 자바의 String 클래스의 특별성 간단 정리

https://www3.ntu.edu.sg/home/ehchua/programming/java/J3d_String.html String is Special - Java Programming Tutorial A Brief Summary of the String Class A Java String contains an immutable sequence of Unicode characters. Unlike C/C++, where string is simply an array of char, A Java String is an object of the class java.lang. Java String is, however, special. Unlike an or www3.ntu.edu.sg 참조 원문입니다. ..

[Java] 자바 자료형(primitive, reference) 에 대한 고찰 - 자바 Integer에 캐시가 있다고?

자바 자료형에 대한 고찰 - 자바 Integer의 캐시기능 참조링크 원문: https://medium.com/@njnareshjoshi/java-integer-cache-why-integer-valueof-127-integer-valueof-127-is-true-e5076824a3d5 Java Integer Cache — Why Integer.valueOf(127) == Integer.valueOf(127) Is True posted by Naresh Joshi on November 25, 2018 medium.com https://nulpointerexception.com/2018/01/06/int-vs-integer-java-application-memory-usage/ 초반부 내용은 다음 원문을 번..

[Docker] Docker의 이미지 변조를 막는 원리 - Docker Content Trust

Docker Content Trust Docker는 Docker Content Trust (DCT)라는 기능으로 악의를 가진 제3자의 행동들로 부터 사용자를 보호한다. https://docs.docker.com/engine/security/trust/content_trust/ Content trust in Docker When transferring data among networked systems, trust is a central concern. In particular, when communicating over an untrusted medium such as the internet, it is critical to ensure the integrity... docs.docker.com Dock..

[우아한테크코스] 6주차후기 - 점진적 리팩토링과 데이터베이스 적용

날짜 TODO 추가 공부 6/10(월) 프로그래밍 (로또) 졸업시험 6/11 (화) 강의 (프로젝트의 요소와 리팩토링) 6/12 (수) 프로그래밍 (로또) 학교과제 6/13 (목) 프로그래밍 (로또) 학교과제 6/14 (금) (동생졸업식) 6/15 (토) 프로젝트 3요소 이번 강의는 "프로젝트 3요소인 비용, 일정, 품질 을 다 좋게할 수 있을까?"에 대한 캡틴의 짧은 언급이 있었다. 일정과 품질에 대해 생각해 볼 수 있는 좋은 기회였다. 많은 경우에서 일정이 품질보다 우선시 되는 경우가 있다고 한다. 그렇다면 일정 > 품질 이라는 것이 나쁜 일 인가라는 의문이 들 수 도 있다. 그렇다고 품질에 집중해서 일정을 놓치면 안된다. 왜냐하면 품질에 대한 명확한 기준이 없기 때문이다. 클린코드를 구현한 프로젝트..

[우아한테크코스] 5주차후기 - 데이터베이스 개론 및 과제 피드백

이번 주 글은 후기와 피드백을 같이 적어본다. 날짜 TODO 추가 공부 6/3 (월) 로또 리뷰 - 6/4(화) 강의 (데이터베이스) 책-객체지향과 디자인패턴 6/5 (수) 프로그래밍 (로또 리뷰) 객체지향 사실과 오해 6/6 (목) 예비군 6/7 (금) 휴무 로또 웹 UI 적용 6/8 (토) 운동 이번 주는 휴무와 겹쳐서 여유가 조금 있는 한 주 였다. 강의: 데이터베이스 개론 준 코치님께서 데이터베이스에 대해 강의를 해주셨다. 준 코치님은 볼때 마다 항상 웃는 모습으로 인사를 해주셔서 너무 좋다. 강의는 간략한 개론으로, 강의 후 자기주도적으로 공부를 하면 되었다. 데이터와 정보의 차이 데이터 - 현실 세계에서 관찰하거나 측정한 사실 또는 값 정보 - 의사결정에 활용하기 위해 데이터를 처리한 결과물 ..

[JDBC] MySQL 드라이버 Class.forName()의 비밀 - 로드만 했을 뿐인데 getConnection()이 가능하다고?

도대체 JDBC드라이버는 Class.forName()으로 로딩만 했을 뿐인데 어떻게 DriverManager 에서 사용이 되는 것일까? Class.forName의 호출 Class 클래스는 JVM에서 동작할 클래스들의 정보를 묘사하기 위한 일종의 메타 클래스이다. 객체의 참조 카운트가 0가 되면 해당 인스턴스는 더 이상 가리키는 참조 변수가 없는 것이므로 GC의 대상이 된다. 그런데 JDBC는 생성시키고 끝난다. 그러면 GC가 되지 않도록 하는 무언가가 있다고 한다. JDBC 드라이버와 같이 인스턴스를 별도로 관리하지 않는 대부분의 클래스의 경우, 그 클래스가 스스로의 인스턴스를 정적 블록을 통해 생성하고 관리한다. 정적 블록을 갖는 클래스들은 Class.forName() 만 호출해도 초기화가 수행된다. ..

반응형