목록Spring (11)
Hayden's Archive
요즘 사용자 정보를 가져와서 로그를 남기는 작업을 하고 있다. 거의 모든 로그를 남기다 보니 사용자 아이피, 현재 시간, 사용자 아이디를 계속해서 가져와야 할 일이 생겼다. 아무래도 계속해서 공통적으로 쓰이는 코드라면 모듈화하는 것이 좋다. 따라서 프로젝트 내에 ClientInfo.java라는 클래스를 따로 만들었고, Bean으로 사용할 수 있도록 @Component로 어노테이션을 붙여줬다. 전체 코드 : github.com/devyeony/smart-data-tracing-management/blob/main/src/main/java/kr/com/inspect/util/ClientInfo.java devyeony/smart-data-tracing-management Contribute to devyeo..
요즘 Spring Legacy Project에 스프링 시큐리티를 적용하여 작업을 하고 있다. SecurityConfig에 설정을 입력해서 암호화 후 DB에 회원 등록, 회원 로그인 및 로그아웃, 권한별로 페이지 접근 제한 및 스프링 시큐리티 태그 라이브러리 사용까지 완료하였다. 물론 중간중간에 시행착오와 삽질이 있었지만 그간 해보지 않았던 내용을 책과 구글의 도움을 받아 혼자서 배우고 익혀서 실습하고 성공했다는 데 보람을 느낀다. 스프링 시큐리티는 중간에 필터 하나 더 추가하는 것만으로 개발자가 인증 및 인가 절차를 편하게 구축할 수 있는 강력한 인터페이스를 제공해줘서 실제로 적용해보니까 이걸 왜 쓰는지 알겠다. 이제는 여기에 자동 로그인을 추가해볼까 한다. 나는 프로젝트에서 xml이 아닌 Java Co..
참고 : 책 - 코드로 배우는 스프링 웹 프로젝트 ( book.naver.com/bookdb/book_detail.nhn?bid=13993776 ) 카페 - 구멍가게코딩단( cafe.naver.com/gugucoding ) codevang.tistory.com/266 Spring Security 설명 거의 대부분 웹 기반 프로젝트에서 사용자의 권한이나 등급에 기반을 두는 로그인 체크를 이용 스프링 시큐리티를 이용하면 다음과 같은 작업들을 간편히 처리할 수 있음 로그인 처리와 CSRF 토큰 처리 암호화 처리 자동 로그인 JSP에서의 로그인 처리 스프링 시큐리티의 기본 동작 방식 : 서블릿의 여러 종류의 필터(Filter)와 인터셉터(Interceptor)를 이용해서 처리 필터는 서블릿에서 말하는 단순한 필..
관련 포스팅 : hayden-archve.tistory.com/376 위 포스팅을 참고해서 PuTTY를 통해 해당 서버에 접속한다. 우선 서버에 자바와 톰캣이 설치되어 있어야 한다. linuxize.com/post/how-to-install-tomcat-9-on-ubuntu-20-04/ tomcat 경로에 chown(소유권 변경), chmod(파일권한 변경) 명령어를 활용하여 권한을 설정해준다. 그래야 해당 경로에 파일을 생성, 수정, 삭제할 수 있다. 여기까지 됐으면 tomcat을 실행시킨다. $ service tomcat start 이제 FileZilla Client를 설치한다. $ sudo apt-get install filezilla 아래의 명령어로 filezilla를 실행한다. (또는 프로그램 ..
Spring Legacy Project 에서 PostgreSQL과 Hibernate를 연동해보려고 한다. 사실 이 때까지 RDBMS로 MySQL을 썼고, MyBatis와 연동해서 하는 방식이 더 익숙하다. 하지만 익숙한 것만 고집할 수 없고 시간이 걸리고 헤매더라도 새로운 지식도 흡수해야 한다. 그래서 스프링에서 PostgreSQL과 Hibernate를 연동하고 데이터를 삽입해보겠다. 개념 참고 gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html [JDBC] JDBC, JPA/Hibernate, Mybatis의 차이 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.git..
getDB()로 몽고DB에 문서를 삽입하는 실습을 했다. 결과는 성공적이었지만 getDB()가 사용이 지양되는(deprecated) 메소드였다. (database, col 변수에는 각각 몽고DB의 database, collection 이름으로 미리 할당해뒀다.) public void testMongoInsert() { @SuppressWarnings("deprecation") DB DB = mongoClient.getDB(database); DBCollection collection = DB.getCollection(col); String json = "{'name' : 'elsa'," + "'age' : '20'," + "'family' : {'person1' : 'anna', 'person2' : '..
VO 필드명 DB 컬럼명 자바에서는 주로 Camel Case를 쓰는 반면, DB에서는(+파이썬에서도) Snake Case를 쓴다. 그러다 보니 VO 필드명과 DB 테이블 컬럼명이 불일치하는 경우가 생길 수 있다. 위에서는 userId, userName과 user_id, user_name이 서로 불일치한다. 단위 테스트 코드 package ibatis.services.user.test; import ibatis.services.domain.User; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apac..
* Summary SqlSession * query statement * INSERT INTO ------------- insert() * DELETE FROM ------------- delete() * UPDATE table ------------ update() * SELECT all -------------- List selectList() * SELECT one -------------- Object selectOne() DB 테이블 - mysawon VO - MySawon.java package com.encore.mybatis.vo; /* * Framework에서는 반드시 기본 생성자를 넣어야 한다.(생성자 아무것도 안 넣었을 경우에는 알아서 만들어짐) * MyBatis에서는 값의 주입을 S..
* Summary 하나의 bean은 하나의 객체와 같음. bean 태그에는 필수속성 2개가 있음. id와 class class에 FQCN을 쓰고, id에는 인스턴스명을 씀. 주문서를 보고, 주문서대로 객체를 만들고 객체를 보관하고 있는 클래스가 DI Container인 것. * 폴더 구조 Dice.java (인터페이스) package spring.service.dice; public interface Dice { void selectedNumber(); int getValue(); } DiceAImpl.java (DiceBImpl.java, DiceCImpl.java도 거의 동일) package spring.service.dice.impl; import java.util.Random; import spr..
(이클립스를 가동해서 Spring을 하려면 STS(Spring Tool Suite)를 연결해야 함. 그런데 지금 쓰는 이클립스 버전이 높고 호환이 잘 안 돼서 STS를 가지고 있는 이클립스를 설치하였음.) 폴더 구조 이클립스에서 Dynamic Web Project를 만들 건데, 기본적으로 있는 src 폴더를 Remove 하고 아래와 같은 큰 줄기 3개를 만들겠음. (모든 폴더는 이 세 가지 폴더 안에 들어가게 됨.) java 폴더 외에 resources 폴더에는 Meta Data(특정한 정보를 상수값으로 가지고 있는 파일)를 넣겠음. Test 클래스는 따로 구분.(~Test, ~AppTest로 끝나는 클래스) src 폴더를 다각화 시킬 것. src 폴더 안에는 클래스만 넣는다. test는 그저 실행 파일..