본문 바로가기

분류 전체보기

(108)
스프링 컨테이너와 스프링 빈 스프링 컨테이너란? : 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할 스프링 빈이란? : 자바 객체를 스프링에서는 빈(Bean)이라고 부름 컨테이너와 빈이라는 걸 계속 개념 정리는 해왔지만 확 와닿지 않는다. 컨테이너가 뭐지?.. 공사장 근처에 있는 회색 컨테이너가 생각난다.빈?? 원빈인가?ㅋㅋ 다음 스프링 컨테이너를 생성하는 과정을 통해 개념을 더 잘 이해해보도록 하자! ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 위의 코드는 스프링 컨테이너를 생성하는 코드인데 여기서 ApplicationContext 를 '스프링 컨테이너'라 한다...
AppConfig와 DI 스프링 어린이(스린이)로서 프로젝트를 할 때 괜찮은 코드를 참고 위해 구글링하면서 여기 저기 돌아다니다보면 "AppConfig" 이 녀석을 많이 보게 된다. 이전 뭐지? 뭐 설정해주는건가? 하고 넘겼다. 게다가 스린이 입장으로 봤을 때 '한 번의 선언으로 해결할 수 있는데 쓸데없이 코드가 한 번 더 있네? 빼야하는 부분 아닌가? 뭐 가독성은 있는데 빼는 게 더 나을듯 후훗 역시 나는 효율적이야' 라고 생각했다. (바보같은 생각) 하지만 알고보니 이 녀석은 아주 좋은 객체지향 코드가 되기 위한 핵심 역할을 해주는 좋은 녀석(마치 찐빵의 팥)이었다!! 비유적으로 접근하자면, 배역은 인터페이스이고 배우는 이를 구현하는 구현체라고 하자. 이때, AppConfig는 "공연 기획자, 캐스팅 담당자"로 배역에 맞는 ..
웹 애플리케이션의 이해 - WAS와 서블릿 ✔️웹서버 vs 웹 어플리케이션 서버 웹서버 HTTP 기반으로 동작 정적 리소스 제공, 기타 부가 기능 정적(파일) HTML, CSS, JS, 이미지, 영상 → 어떠한 파일에 대한 요청이 오면 그것을 그대로 제공함 예) NGINX, APACHE 웹 애플리케이션 서버 (WAS) HTTP 기반으로 동작 웹서버 기능 대부분 포함 + (정적 리소스 제공 가능) 웹서버와 다른 점은 “프로그램 코드를 실행해서 애플리케이션 로직 수행” 한다는 것 동적 HTML, HTTP API(JSON) 서블릿, JSP , 스프링 MVC 예를 들어 코드를 실행할 수 있기 때문에 각 사용자의 이름을 띄우는 것 예) 톰캣 Jetty, Undertow 💚웹 서버와 웹 어플리케이션의 차이 “웹 서버는 정적 리소스(파일)을 제공해주는 것이고..
[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] EC2 서버에 프로젝트를 배포 8.1 EC2에 프로젝트 clone 받기 깃허브에서 코드를 받아올 수 있게 EC2에 깃을 설치한다. EC2로 접속해서 다음과 같이 깃 설치 명령어를 입력한다. sudo yum install git 깃이 성공적으로 설치되면 git clone으로 프로젝트를 저장할 디렉토리를 생성한다. mkdir ~/app && midir ~/app/step1 생성된 디렉토리로 이동한다. cd ~/app/step1 깃허브 웹페이지에서 http 주소를 복사한다. git clone [복사한 주소] git clone이 끝났으면 클론된 프로젝트로 이동해서 파일들이 잘 복사되었는지 확인 cd [프로젝트명] ll 코드들이 잘 수행되는지 테스트로 검증 ./gradlew test → 정상적 테스트 통과 만약 gradlew 실행 권한이 없다..
객체 지향과 스프링(다형성과 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..