개발 공부 39

개발 공부/Spring [Spring Security] 웹 시큐리티

스프링 시큐리티 ignoring() 아래와 같이 index 페이지에 css를 적용하고 다시 요청을 해보자. Hello #hello { font-size: 100px; } css로 폰트 크기를 변경했음에도 실제로는 반영이 되지 않은 것을 확인할 수 있다. 개발자 콘솔로 요청과 응답 상태를 확인해보면, css 파일을 요청하는데 302(리다이렉션) 코드가 뜨고 login 페이지를 추가로 요청한 것을 확인할 수 있다. 이는 WebSecurityConfigurerAdapter를 통해 시큐리티를 설정할 때 지정한 경로 외의 모든 요청은 인증을 받도록 했기 때문에 정적 리소스를 요청하는 경로 또한 인증을 필요로 하게 되었기 때문에 발생하는 문제이다. 이를 해결하기 위해서는 시큐리티 필터가 적용되지 않도록 ignori..

2023.03.10

개발 공부/Spring [Spring Security] 아키텍처

SecurityContextHolder와 Authentication SecurityContextHolder SecurityContext 를 제공. 기본적으로 ThreadLocal을 사용하기 때문에 SecurityContext는 동일 쓰레드 내에서 항상 접근이 가능 SecurityContext Authentication을 제공 // SecurityContextHolder -> SecurityContext -> Authentication Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // Principal Object principal = authentication.getPrincipal(); //..

2023.02.23

개발 공부/Spring Gradle plugins vs dependencies

이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 을 따라 진행하며 웹 앱을 개발하고 배포하는 전체 과정을 쭉 따라고 보고 싶었는데 첫 장부터 막혀버렸다..ㅋㅋ start.spring.io에서 완성된 프로젝트 파일을 다운로드하여 import 해 사용하는 방식으로 공부해왔어서 gradle 설정에서 문제가 발생하니 해결하기가 어려웠다. (동욱님께서도 책에서 이러한 문제 때문에 직접 gradle 설정 파일을 작성해보기를 권장하신다.) 그래서 이 참에 평소 gradle 설정 파일에서 궁금했던 정보를 찾아 정리해봤다. 워낙 기능과 정보가 방대해서 지금 내 수준에서 필요한 정도로만 정보를 찾고 정리했다. 다른 때와 달리 최대한 gradle 공식 문서만을 참고하려고 노력했다..! Gradle Gradle은 ..

2022.06.25

개발 공부/기타 [git] .gitignore 문법 및 규칙 정리

이번에 졸업 프로젝트를 진행하며 프로젝트를 깃헙으로 관리하게 되었는데 의도치 않게 .idea 등 개인 프로젝트 설정 파일까지 모두 깃헙이 관리하는 파일로 설정되어 업로드 되는 일이 발생했다. 이런 경우 fetch, pull 과정에서 개인 프로젝트 설정이 날라가는 일이 발생할 수 있으니 수정해야한다고 멘토님께서 지적해주셨고 이와 관련한 pr도 올려주셨다. 멘토님께서 올려주신 pr에 포함된 .gitignore 파일을 확인하던 중 .gitignore 문법과 규칙에 대해 이해되지 않는 부분이 있어서 찾아보고 중요하다고 생각되는 것들을 정리했다. .gitignore 문법 공백 → no files #로 시작하는 line → 주석 \를 통해 escape 할 수 있다. ! → 이전 패턴에 의해 exclude 되었던 파..

2022.05.23

개발 공부/Java 형 변환 정리

알고리즘 문제를 풀다보니 문제는 풀 수 있겠는데 형변환을 못해서 해결이 안 되는 문제가 꽤 많았다. 그래서 형 변환 문제에 봉착할 때마다 계속해서 추가하며 정리해보려고 한다. String ↔ int Integer의 static 메소드 parseInt, toString을 사용할 수 있다. String → int // 기본형 int i = Integer.parseInt(str); // str이 x진수로 작성되었다고 생각하고 int로 변환 int t = Integer.parseInt(str, x); int → String String str = Integer.toString(i); char ↔ int 이 경우 (char), (int)로 간단하게 변환 가능 char로 변환하는 경우 int 값을 아스키코드로 인식..

2022.05.17

개발 공부/Java 내부 클래스에 static이 권장되는 이유

강의를 듣던 중 강사님께서 내부 클래스를 static으로 선언하시길래 이유가 궁금하여 찾아보았다. 찾아보니 이팩티브 자바에 해당 내용에 대한 설명이 나와있다고 한다. 나중에 꼭 읽어봐야지,, 결론은 내부 클래스에서 외부 클래스의 인스턴스 변수에 접근하지 않는다면 내부 클래스는 static으로 선언하는 것이 좋다는 것이다. 그 이유는 크게 두 가지로 정리할 수 있는데 static으로 선언되지 않은 내부 클래스는 외부 클래스에 대한 숨은 참조를 저장해야 하기 때문에 이를 위한 시간/공간적 복잡도가 증가해 성능이 떨어진다. 내부 클래스가 외부 클래스에 대한 숨은 외부 참조를 갖기 때문에 가비지 컬렉션이 제대로 이루어 지지 않아 메모리 누수가 발생할 수 있다. 숨은 외부 참조 숨은 외부 참조라는 개념이 잘 와닿..

2022.04.26

개발 공부/Java 함수형 인터페이스와 람다식

스프링 및 자바 공부 중에 람다식을 통한 익명 내부 클래스를 종종 사용하게 되었는데 원리를 모르고 따라 사용하기만 하고 있는 듯해서 관련 내용을 공부하고 정리했다. 1. 함수형 인터페이스? 추상 메서드가 한 개만 선언된 인터페이스를 말함. 추상 메서드 외에 다른 static, default 메서드 존재 여부 및 개수는 관계 없음 @FuncationalInterface 어노테이션을 붙여 해당 인터페이스가 함수형 인터페이스인지 검증할 수 있다. (필수는 아니나 함수형 인터페이스가 아닐 경우 오류 발생) 자바에서는 기본적으로 여러 종류의 유용한 함수형 인터페이스를 제공한다. ex) 함수형 인터페이스 Function Generic으로 T 타입 인자를 받아 R 타입을 반환한다. 수학의 ‘function’과 같은 ..

2022.04.26

개발 공부/Java ISP (인터페이스 분리 원칙) in 스프링 프레임워크

제목이 너무 거창한가 스프링 공부 중 아래와 같이 스프링 컨테이너인 ApplicationContext 의 구현체로 AnnotationConfigApplicationContext 를 설정하고 BeanDefinition을 반환하는 ac.getBeanDefinition() 메서드를 호출하려는데 계속 메서드를 찾을 수 없다는 오류가 발생했다. ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 알아보니 ac의 타입을 인터페이스인 ApplicationContext가 아닌 구현체 자체로 설정해주어야 했고, 이러한 일이 발생하는 이유는 객체 지향 설계 원칙인 SOLID 중 ISP 때문이라고 한다. ORP나 DIP, SRP에 ..

2022.04.17

개발 공부/Java 자바 기초 여러가지 정리

개인적으로 맨날 쓰는데 맨날 헷갈리는 자바 기초 문법이나 특징 등등을 정리해봤습니다. 이 글은 제가 또 새롭게 헷갈리는 게 나오는 대로(?) 계속해서 업데이트할 예정입니다..😂 기본 자료형 vs 참조 자료형 기본 변수는 메모리에 값 자체를 저장하지만 참조 변수는 참조하는 객체의 주소를 메모리(변수)에 저장한다. JAVA에서 char 크기 c와 다르게 java에서는 char이 2byte로 저장된다. 서식 문자 %d - 10진수 → %Xd - 오른쪽 정렬 + 최소 X칸 만큼 공백 유지 %o - 8진수 %x - 16진수 %f - 실수 → %.Xf - 소수점 아래 X자리까지 출력 %c, %s - 문자, 문자열 조건문 (삼항 연산자) 축약 표현 조건문 : true ? false JAVA 배열의 특징 자바에서 배열..

2022.03.27