전체 글 87

RestDocs @AuthenticationPrinciapl 인증 실패 Error

개인 프로젝트 REST API Server 작업이 슬슬 마무리되는 단계여서 문서화의 필요성을 느꼈다. API 문서화는 TestCode를 중요하게 생각하기때문에 RESTDocs로 결정. Spring 공식 문서를 참조해가며 글 등록API를 문서화하려다 문제가 발생했다. mockMvc를 이용해 문서화를 진행하려했고 컨트롤러 클래스의 테스트경우 SpringBoot Container를 띄우면 테스트가 장기적으로 느려질 가능성이 매우 크기에 standAloneSetup을 이용해 RestDocs Test를 진행하려했지만, 위 방법으로 mockMvc를 설정해 request를 요청하니 컨트롤러 메서드에서 받기로한 UserPrincipal 인증객체를 가져오지 못하는 에러가 발생했다. RestDocs Test가 아닌 본 컨..

Error 2024.01.16

AOP

핵심 기능과 부가 기능의 분리 AOP(Aspect-Orientd Programming) : 애플리케이션을 바라보는 관점을 하나하나의 관점에서 횡단 관심사 관점으로 달리보는것. *횡단관심사: 애플리케이션 전반에 걸쳐 핵심 관심에 영향을주는 영역 내가 원하는 핵심기능에 부가기능을 적용 할 수 있다. AOP의 대표적인 구현으로 AspectJ Framework가 존재한다. Spring에서는 AspectJ의 문법을 차용하고, AspectJ의 제공하는 기능의 일부만을 제공한다. 횡단 관심사의 모듈화 오류 검사 및 처리 동기화 캐싱 모니터링 및 로깅 AOP 적용방식 컴파일 시점 적용 .java 소스를 AspectJ컴파일러를 사용해 .class를 만드는 시점에 부가기능 로직을 추가 할 수 있다. 원본 로직에 부가 기능..

공부/Spring 2024.01.14

리다이렉션

Standard Output Redirection: 명령어의 출력값을 파일로 저장하거나, 프린터 또는 다른기기로 보낼 수 있다. "명령어 > 파일명" 출력값을 파일로 얻을 수 있다. 이미 존재하는 파일로 덮어쓰기도 가능 "파일1 > 파일2" 파일1로 파일2를 덮어 쓸 수 있다. ">>" appending >> 원래 존재하는 파일에 추가해서 리다이렉션 할 수 있다. Standard input Redirection: 명령어의 입력값을 파일로 저장하거나, 프린터 또는 다른기기로 보낼 수 있다. cat은 파일명을 입력안하고 엔터를 칠 경우 입력을 기다리며 키보드 입력을 리스닝하게된다. cat < test.txt cat으로 test.txt의 데이터를 표준입력받는다. Standard error Redirect..

공부/Linux 기초 2024.01.14

빈 후처리기

@Bean이나 Component Scan 으로 스프링 컨테이너 내부에 빈 저장소에 등록하기전 해당 빈을 조작 후 등록한다. (빈을 생성한 후로 무언가를 처리하는 용도) 객체를 조작 할 수도 있고 , 다른 객체로 바꿔치기도 가능함. 빈으로 등록될 A,B 클래스가 존재한다. 빈 후처리기 클래스. 초기화된 빈이 만약 A라면? B를 인스턴스화 해서 B를 return하여 스프링 컨테이너에 B 객체를 등록한다. config를 통해 빈은 A 객체만 등록되도록 설정해놓았지만 빈 후처리기에 의해 B 객체가 스프링 컨테이너에 등록됬단것을 확인 할 수 있다.

공부/Spring 2024.01.13

파일로 작업하기

"cat" 파일안에 무엇이 있는지 확인하고 출력해줌. 여러개를 입력하면 결합시켜 출력한다. tac 명령어도 존재하는데 결합을 역순으로해서 출력해준다. "less" 파일을 열어서 그 내용을 보여준다. / 를 통해서 검색가능 (Vim 으로 파일을 연거랑 비슷한느낌 그냥 vim으로 여는게 나은거같은데) "head" 파일의 시작10줄까지만 확인한다. head -n 옵션으로 줄 수를 정할 수 있다. "tail" 파일 뒤에서부터 10줄을 확인 역시 -n 옵션이 가능하다. head와 tail로 파일을 직접 열지않고 커맨드상에서 깔끔하게 보고싶은 데이터만 확인이 가능하다. "wc" 파일 안의 줄 수 바이트 수 를 알려준다. 순서대로 파일안의 줄 수, 단어의 수, 바이트 수, 경로 -l 옵션을 통해 파일의 줄 수만 얻을..

공부/Linux 기초 2024.01.13

포인트컷, 어드바이스, 어드바이저

포인트컷: 어디에 부가기능을 적용할지 적용하지않을지 판단하는 필터링 로직 클래스와 메서드이름으로 필터링한다. 어드바이스: 프록시가 호출하는 부가기능, 프록시 로직이 작성되는곳. 어드바이저: 포인트컷과 하나의 어드바이스를 가지고 있는것 이렇게 나눠둔 이유는? "역할과 책임을 분리하기위해" 포인트컷은 대상 여부를 확인하는 필터 역할만을 담당 어드바이스는 부가기능 로직만을 담당 둘을 합치면 어드바이저가 된다. 프록시 팩토리를 이용할 때 어드바이저는 필수이다. 스프링은 target마다 하나의 프록시를 만들고 여러개의 어드바이저를 호출한다. 어드바이저당 여러개의 프록시가 생성되는것이 아님

공부/Spring 2024.01.12

13장 점진적 개선

Arg라는 Class 를 초안부터 점진적으로 개선해 깔끔한 구조의 코드를 완성하는 예시를 보여준다. 처음부터 깨끗하고 우아한 코드의 작성을 기대하지말자. 1차 초안으로부터 시작해 계속 리팩토링을 거쳐 깔끔한 최종안을 만들도록 노력하자. 물론 코드를 개선하면서 크게 구조를 바꾸는 경우 큰 문제가 발생 할 수 있다. 저자는 그래서 TDD를 적극 활용한다고한다. 테스트는 시스템을 망가트리는 변경을 허용하지않는다. 테스트라는 안전망을 설치하고 코드의 개선을 이뤄가자.

카테고리 없음 2024.01.12

ShortCut, History

" ctrl + l " clear의 단축키 화면을 깨끗하게 "crtl + a " , "crtl + e" 명령줄 맨앞과 맨뒤로 이동 vim 과 비슷해서 바로 이해 "option + f" , "option + b" 문장 앞 뒤로 이동가능 "option + t" 앞 문장과 교체 가능 "ctrl + k" 커서를 기점으로 그 앞 문장들 잘라내기 잘라내기한 단어들은 "ctrl + y" 로 붙여넣을 수 있다. ctrl + c, v와는 다르다. 클립 보드부터다름. vim이랑 비슷비슷하네 History 방향키 위를 누를때 전 명령어가 뜨던것 명령어로 입력시 그동안 입력했던 명령어가 쭉 뜬다. "history | less" 페이지 단위로 보기가 가능. "!번호 " 를통해 해당 명령어를 실행가능. "ctrl + r"

공부/Linux 기초 2024.01.12

Image Upload, MIME Type을 Octet-Stream으로 결정한 이유

게시판에서 사용자가 질문 글을 작성할 때, 간단하게 사용자가 이미지 1개를 올릴 수 있는 기능을 개발하기로 결정했으므로 어떤식으로 이미지를 업로드할지 고민했다. 우선 이미지 업로드는 그 전 팀프로젝트에서 한번 경험해보긴 했지만, 이미지를 EC2서버에 저장하는 형태였기에 확장성에 있어 부족한점이 많고, 파일이 유실될 가능성도 존재하기에 업로드 방식을 바꿔 진행하기로 결정. AWS S3 를 사용하기로 했다. Client -> Server -> S3 순으로 업로드가 진행되고 S3 -> Server -> Client 순으로 다운로드가 진행되는 구조를 이용하기로 구상을하면서 가장 고민이 됬던점은 MIME Type (미디어타입) 결정이였다. Octet-Stream을 이용할지 MultiPart를 사용할지 공부를 위해..