자바 54

(3) 스프링 컨테이너와 빈 조회

스프링 컨테이너 스프링 컨테이너의 종류 BeanFactory 스프링 컨테이너 최상의 인터페이스다. 스프링 빈을 관리, 조회하는 역할을 담당한다. getBean()을 비롯하여 다수의 기능을 제공한다. ApplicationContext BeanFactory를 상속받는 인터페이스다. 국제화기능, 환경변수, 어플리케이션 이벤트 등 다양한 추가 기능을 제공한다. BeanFactory를 직접 사용할 일은 거의 없다. 부가기능이 포함된 ApplicationContext를 사용한다. BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다 AnnotationConfigApplicationContext : ApplicationContext의 구현체다. 생성자 함수에 @Configuration 클..

공부/springboot 2023.05.10

스프링부트: 시큐리티(1)

시큐리티 인증과 인가를 쉽게 다룰수 있게 도와주는 스프링 디펜던시. 인증을 받고 권한을 부여하는 과정을 대신해준다. 덕분에 각종 공격 및 해킹에 대한 방어를 사용자가 일일이 구현하지 않아도 된다. 루트 매핑("/")이 자체적인 로그인 화면으로 변한다. 이후 어떤 url을 요청하건 간에 자체적인 로그인 화면만 나오게 되는데, 이때 id는 username, 비밀번호는 스프링부트를 실행할때 나오는 일련의 숫자가 된다. 만약 본인이 원하는 비밀번호와 아이디로 바꾸고 싶다면 apllication.property 를 통해 설정해줘야만 한다. # security # defallt username/password spring.security.user.name=user # id설정 spring.security.user...

공부/springboot 2023.02.20

DTO/ DAO/ VO의 개념 정리

DTO/DAO/VO는 모두 객체, 즉 클래스이다. MVC와 비슷한 개념이 많아 햇갈려서 이해하는데 시간이 좀 걸렸다. 둘 모두 프로그램 설계와 관련된 개념이나 차이점이 존재한다. 기본개념 1.DTO(Data Transfer Object) 이름을 직역하면 데이터 변환 오브젝트로, 실제로 이름 그대로의 역할을 수행한다. 이에 대해 검색해보면 대부분 "각 계층간 데이터 교환을 위한 객체"라는 설명과 레이어 계층 사진을 넣고 설명을 끝낸다. 그러나 나는 최대한 이해하기 쉽게 정리하려고 한다. 때문에 개념을 완벽하게 이해하는데 있어 약간의 미흡함이 존재할지는 모르나, 무슨 역할을 하는 객체인지는 이해할수 있을 것이다. DTO란 쉽게 이해하자면 DB에서 가져온 데이터 중, 필요한 정보만 빼온 객체를 따로 만든 것이..

카테고리 없음 2023.01.29

스프링부트: Junit을 이용해 테스트 하기

Test란? 개인이 간단하게 어떤 서비스를 구현한다고 하면 코드는 길어봐야 수천줄 정도 나오겠지만, 회사의 서비스는 만줄은 우습게 넘어갈 정도로 방대한 양의 코드가 동작한다. 헌데 긴 코드에 무턱대고 새로운 코드를 끼워넣으면, 그 코드가 어떻게 작동하는지 확인하기 위해 재실행하는데 리소스가 많이 들 뿐만 아니라, 오류가 발생할 경우 원인이 무엇인지 찾기도 어려워진다. 이런 일을 방지하기 위해 프로그램을 작은 단위로 쪼개서 옳바르게 동작하는지 미리 확인하는 것이 바로 Test다. 과거에는 개발자들이 직접 테스트 환경을 만들어야 했으나, 테스트를 필요로하는 개발자들이 늘어남에 따라 스프링부트에서는 테스트 환경이 내장되어 있기에 따로 할일은 없다. 방법(인텔리제이에서 만드는 방법) 1. 테스트하고 싶은 클래스..

공부/javascript 2023.01.27

JPA 사용법(2) -- JPQL

JPQL이란? SQL을 자바에서 사용할수 있게끔 변환된 SQL. JPA는 테이블이 아닌 엔티티 객체를 중심으로 개발하기 때문에 쿼리문을 사용하지 않는다. 그러나 어찌되었건 특정 데이터를 검색하기 위해서는 쿼리문의 역할을 해줄 것이 필요한데, JPA에서는 이를 위해 JPQL을 제공한다. JPQL은 객체를 대상으로, SQL은 테이블을 대상으로 쿼리한다는 것이 차이점이다. 특징 1. 엔티티와 속성은 대소문자를 구분하지만, 키워드는 구분하지 않는다. 예) select m from Member as m where m.age > 18 SELECT m FROM Member as m WHERE m.age > 18 둘 모두 동일하게 작동한다. 2. 테이블이 아닌 엔티티 객체 이름을 사용하며, 마찬가지로 컬럼이 아닌 필드..

공부/springboot 2023.01.26

JPA 사용법(1) -- JPA 사용법

JPA란? 자바와 관계지향 데이터베이스간의 언어적인 차이를 해소시키기 위한 api. 관계지향적인 DB를 객체지향적으로 해석해주며, 객체지향적인 JAVA를 관계지향적으로 변환해주는 일종의 번역기 역할을 한다고 생각하면 된다. JDBC와의 차이 JDBC는 데이터베이스와 소통하기 위한 api이고, JPA는 소통하는 관계지향적 db를 객체지향적으로 바꾸는 api로 기술적인 개념이라고 봐야한다. 형식(이미 db에 만들어진 테이블이 있다고 가정하겠다) 1. 테이블과 1:1대응될 테이블과 이름이 같은 Entity클래스를 하나 만든다. package com.study.springboot; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lo..

공부/springboot 2023.01.26

MVC -- Model(2) : 데이터 받아오기

형식 1. html파일에서 보내고자 데이터들을 보내는 요청사항 이름을 지정해준다. 2. @RequestMapping 등을 이용하여 요청사항에 대한 응답 함수를 짠다. 코드를 직접 보며 확인해보자. 로그인 화면입니다. 데이터 입력 html 로그인 결과 화면 username 값 password 값 데이터 출력 html 데이터 수신의 3가지 방식 1. 기본형 - HttpServletRequest를 통한 입력값 받기 @RequestMapping("/loginAction1") public String loginAction1(HttpServletRequest request, Model model){ // 받아온 데이터 변수로 저장 String username = request.getParameter("usernam..

공부/springboot 2023.01.25

MVC -- Model(1): 데이터 전송하기

Model 클래스 model 클래스는 mvc패턴을 따라 웹을 설계할수 있도록 스프링프레임워크에서 지원하는 클래스이다. mvc의 m을 맡고잇는 model은 데이터를 보관하는 역할을 한다. model은 데이터를 controller로 보내거나 받으며, controller는 데이터를 가공하고, view는 받은 데이터를 토대로 화면을 구현하거나, 입력된 controller로 데이터를 보낸다. model에 의해 불러와지는 데이터는 크게 4가지 종류로 존재한다. 내장객체의 생명주기 1. application : 웹브라우져 닫을때까지 객체가 살아있다. 2. session : 로그아웃을 하거나 브라우져를 닫을때까지 살아있다. 3. request : 요청에 대한 응답이 있을때까지 살아있다. 4. model : reques..

공부/springboot 2023.01.25

타임리프 레이아웃

타임리프 레이아웃( ThymeleafLayout) 타임리프에는 레아이웃이라는 기능이 존재한다. 우리가 어떤 웹사이트를 만들때, 각 창에 헤더나 풋터처럼 공통된 부분이 상당부분 존재하게 된다. JS에서는 jQuery의 load함수를 이용해 이런 공통되는 부분들을 코드로 작성하지 않고, html파일 통째로 끌고오는 식으로 구현했던 것과 같이, 타임리프 레이아웃 역시 이를 위한 기능이다. 다만 역시 JAVA답게 그 적용방식이 JS보다 훨씬 복잡하다. 사용법 1. 타임리프와 타임리프 레이아웃을 html파일 상단에 끌고온다. 2. 공통 양식 코드만 작성한 html 파일을 만든다. 공통적인 부분의 html은 각각 다른 파일을 만들어 코드를 작성하자. 그렇게 만들어진 파일에 구현된 태그에 th:fragment="he..

공부/springboot 2023.01.25

자바(java)의 생성자 함수

생성자 함수 (Constructor) : 객체 생성시 자동으로 호출되는 함수 형식 public 클래스이름() { } - 다른 함수들과 달리 int나 String처럼 반환형식 지정을 안함. //클래스에서 중요한 개념들 //1.상속 : 모듈화/계층화, 중복제거 //2.생성자함수 : 객체생성시 자동으로 호출되는 함수 //3.다형성 : 상속관계에서 하나의 객체가 여러 타입을 가질수 있다. // : B클래스가 A클래스를 상속했다면, 타입을 B타입,A타입 // 2개 다 타입으로 가질 수 있다. //4.추상화 클래스 : 일반 클래스(일반 함수) + 가상함수 //5.인터페이스 : 인터페이스 타입에 가상함수만 있는 것 //생성자 함수 : Constructor // : 객체생성시(new) 자동으로 호출되는 함수 // 용도..

공부/java 2023.01.23