본문 바로가기

분류 전체보기

(106)
객체 지향과 스프링(다형성과 SOLID) 이 글은 김영한님의 "스프링 핵심 원리 - 기본편"을 듣고 정리한 글입니다. (인프런) 이번에 프로젝트를 진행하면서 스프링의 장점 중 하나인 "재사용성" 부분을 고려하고 짜려고 했다. 하지만 적용하는 것은 역시 쉽지 않았다. 프로젝트 리팩토링할 때 스프링의 근본을 더 잘 알면 더 좋은 코드를 짤 수 있을 것이라고 생각이 들어 강의를 듣게 되었다. 역할과 구현을 분리 자바 언어의 다형성을 활용구현 : 인터페이스를 구현한 클래스, 구현 객체 역할 : 인터페이스 객체를 설계할 때 역할과 구현을 명확히 분리 객체 설계 시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기 (즉, 구현보다 인터페이스가 먼저임, 역할이 더 중요하다) 클라이언트에 영향을 주지 않는 변경 가능 → 요청을 받는 쪽..
[🔐 스프링 시큐리티] 스프링 시큐리티 용어와 흐름 🔐 스프링 시큐리티란? Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크 스프링 시큐리티의 핵심 역할은 Authentication Manager(인증 매니저)를 통해서 이루어진다. Authentication Provider는 인증 매니저가 어떻게 동작해야 하는지 결정하고 최종적으로 실제 인증은 UserDetailsService에 의해서 이루어진다. 🔐 필터와 필터 체이닝 스프링 시큐리티에서 필터는 서블릿이나 JSP 에서 사용하는 필터와 같은 개념입니다만 스프링 시큐리티에서는 스프링의 빈과 연동할 수 있는 구조로 설계되어 있다. 일반적인 필터는 스프링의 빈을 사용할 수 없기 때문에 별도의 클래스를 상속받는 형태가 많다. 스프링 ..
라꾸라꾸 프로젝트를 마치면서 한 달동안의 프로젝트를 완료했다. 그 시간을 되돌아보며 느낀 점에 대해서 글을 써보려고 한다. 7월 5일부터 8월 8일까지 길다면 길고 짧다면 짧은 시간이지만 정말 많은 것들을 배웠다. 그리고 개발 개그같은 것도 공감이 되기 시작했고 개발하는 사람들이 말하는 것들이 이해가 되기 시작했다. Git 처음에 깃으로 협업을 제대로 해본 적이 없어 "PR 날린다"는 말이 뭘까?? 자기 PR한다고 할 때 그 PR 인가?라고 생각했었다. 그리고 이슈를 발행하고 PR을 날리라는 것에 대해서 적응이 안되어 맨날 깃 컨벤션을 보면서 커밋, 푸쉬, pr을 했다. 깃때문에 정말 울고 싶었다.. 그리고 처음에는 main에 푸쉬하고 머지 후 커밋을 해야하는 지 몰라서 안했더니 커밋이 안 되어 시간을 낭비했다.. 그 당시에는 뭐 ..
[CORS 에러] 멘붕의 CORS 에러 [2023.5.24 추가] - 3기 백인턴 분들을 위해 하단에 간단하게 작성한 부분이 있으니 참고해주세요! 스프링 어린이 + 제대로 된 프로젝트가 처음이었던 나는 어느 날 프론트에게 CORS 에러가 나서 해결해주실 수 있냐고 문의를 받았다. 시큐리티 부분도 소화하기 어려웠는데 CORS 문제까지 있다니! 다행히 같이 모각코하던 백엔드 인턴분께서 좋은 블로그를 찾아주셔서 해결할 수 있었다. 신기하게 그 작성자님이 학교 선배님이셨다는 놀라운 이야기...최고최고!!! 덕분에 해결했습니다ㅜㅜ 감사합니다!!! 👍👍👍 https://myunji.tistory.com/515 [Spring] Spring Security PostMan에서 잘 되던 api가 프론트에서 cors 에러를 띄운다면 현재 프론트로 React를 쓰..
[예외처리] 방법 소개와 프로젝트 적용 스프링에서 예외 처리하는 3가지 방법 1) try - catch : “각 메소드” 안에서 처리 2) 어노테이션@ExceptionHandler : “컨트롤러 자체”에서 처리, Global level에서 처리 → 추천 3) 클라이언트에서 전달되기 직전에 처리 실행흐름 [컨트롤러에서 예외 발생] 에러가 터지면 Dispatcher Servlet을 통해 ExceptionResolver 에게 간다. ExceptionHandlerExceptionResolver에게 간다. 이것이 컨트롤러에게 가서 “@ExceptionHandler”부분을 찾는다. 해당 메소드를 실행시킨다. -자세하게 설명하자면! 컨트롤러를 호출한 결과 IllegalArgumentException 예외가 컨트롤러 밖으로 던져진다. 예외가 발생했으로 Ex..
[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] JPA_도메인 JPA 소개 패러다임 불일치 객체 지향 프로그램과 관계형 데이터 베이스의 “패러다임 불일치” 객체 지향 프로그래밍 = 메시지를 기반으로 기능과 속성을 한 곳에서 관리 관계형 데이터베이스 = 어떻게 데이터를 저장할지 객체 지향의 부모 관계 자식의 관계를 관계 데이터 베이스로 구현하기 없다. → 개발이 데이터 모델링에만 집중하게 된다는 단점 해결 방법 = JPA = 객체 중심으로 개발 가능 [ Spring Data JPA ] 개념 JPA = 인터페이스로서 자바 표준 명세서이다. 인터페이스인 JPA를 사용하기 위해서 구현체가 필요하다. (ex) Hibernate, Eclipse Link 하지만 스프링에서 JPA를 사용할 때 이 구현체들을 직접 다루지 않음 구현체를 좀 더 쉽게 사용하고자 추상화 시킴(= Spr..
[JWT] Access Token 재발급 문제 프론트와의 커뮤니케이션 처음에는 어디까지가 프론트의 부분이고, 어디까지가 백엔드의 부분인지 정확하게 알지 못했다. 그냥 api 문서를 보고 어떤 것들을 주고 받는지만 알았다. 하지만 스프링 시큐리티 부분에서 진정한 프론트와의 커뮤니케이션을 하게 되었고 개발을 할 때 프론트가 어디까지 할 수 있는 지 알고 있어야 겠다는 깨달음을 얻었다. 🧐Access Token 관련 재발급 문제 백엔드에서 로그인 기능을 구현하기 위해 JWT를 이용하여 access 토큰을 발행하고 refresh 토큰을 이용하여 accessToken을 재발급하는 방법으로 accessToken의 만료로 인한 재로그인의 불편함을 줄이고자 했다. 이 글은 Access Token 재발급 문제에 대해서 어떻게 커뮤니케이션을 했는지에 대한 과정을 담고..
🌕라꾸라꾸(LakkuLakku) 프로젝트 시작 '라꾸라꾸'는 웹 기반 공유 다이어리 서비스로, 쉽고 간단하게 다이어리를 작성하여 나만의 라이프스타일을 꾸미고 이를 공유하고자 하는 유저들을 위해 제작되었습니다. 웹 기반 서비스이기 때문에 간편하게 휴대하고 걱정없이 저장할 수 있으며, 나의 일기를 한 눈에 확인하고 친구와 공유하며 댓글로 소통할 수 있습니다. 또한 기본 제공되는 300여종의 스티커 및 템플릿를 활용하여 간단하게 다이어리를 꾸밀 수 있으며 원하는 사진을 스티커로 만들어 나만의 다이어리를 만들 수 있습니다. 라꾸라꾸는 디자인 2명, 프론트엔드 4명, 백엔드 4명으로 구성되어 있다. 필자는 백엔드로 참여했기 때문에 백엔드 위주로 작성해보고자 한다. 백엔드 기술 스택 DEVELOPE : Spring, MySQL AWS : Amazon AWS, ..
Chap 6-5. 힙 정렬(Heap Sort) 먼저, 힙이라는 자료구조에 대해서 알아보고 이를 이용한 정렬 방법에 대해 알아보자! 힙(Heap)을 공부할 때 항상 가수 마마무의 노래 중 힙(HIP)이 생각난다 ㅎㅎ 배경음악으로 틀고 공부해보자...ㅎ 😎힙(heap)이란? 힙 ("이진 힙"이라고도 한다)은 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위하여 고안된 완전 이진 트리(Complete Binary Tree)를 기본으로 한 자료구조이다. 힙이라고 하는 것은 우선순위큐를 구현하기 위해 만들어진 데이터 타입이라고 할 수 있다. 여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다.(빠르다니.. 완전 HIP한 Heap 이다.) ✔️힙 조건 : 각 노드의 우선 순위가 자식 노드의 우선순위보다 높거나 낮을 때 ✔️힙 종..
Chap 6-4. 쉘 정렬(Shell Sort) 🌈Shell 정렬이란? 쉘은 ‘Donald L. Shell’이 제안한 방법으로 “쉘 정렬”이라고 한다. 다른 정렬 방법들은 정렬 방식이 이름이지만 이것은 만든 사람의 이름이라는 점에서 차이가 있다. 여러 가지 정렬 방법들을 배우는데 이름과 방법이 매치가 되지 않는다. 그래서 본인은 정렬 방식이 이름에 표면적으로 드러날 수 있도록 “Gap 삽입 정렬”이라고 자의적으로 생각해봤다.(일명 뇌피셜이라 할 수 있다.. ㅎ) ✔️방법 : 전체 리스트를 일정 간격(gap)의 부분 리스트로 나눈다. -> 나누어진 각각의 부분 리스트를 insertion sort 수행한다. (부분 리스트 별로 sort를 수행한다) 🌈motivation ✔️버블 정렬이나 삽입 정렬이 수행되는 과정은 ”기껏해야” 이웃하는 원소의 자리바꾸는 ..