전체 글 83

[스프링 시큐리티] 스프링 시큐리티 커스터마이징 - PasswordEncoder

스프링 시큐리티의 비밀번호는 반드시 인코딩 해야한다 스프링 시큐리티가 제공하는 PasswordEncoder는 특정한 포맷으로 동작함 {id}EncodedPassword 다양한 전략의 패스워드 인코더를 사용할 수 있다. @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } 위와 같이 Bean을 등록하면 스프링 시큐리티가 기본적으로 제공하는 다양한 인코더를 사용할 수 있다 public final class PasswordEncoderFactories { private PasswordEncoderFactories() { } public static Pas..

스터디-Spring 2022.01.08

[스프링 시큐리티] 스프링 시큐리티 커스터마이징 - JPA 연동

JPA + H2 추가 org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime Account Entity @Entity public class Account { @Id @GeneratedValue private Integer id; @Column(unique = true) private String username; private String password; private String role; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return use..

스터디-Spring 2022.01.07

[스프링 시큐리티] 스프링 시큐리티 커스터마이징 - 인메모리 유저 추가

자동 설정 유저 정보는 UserDetailsServiceAutoConfiguration SecurityProperties 위의 클래스를 통해서 설정 된다. Properties에서 유저정보 설정하기 application.properties spring.security.user.name=admin spring.security.user.password=123 spring.security.user.roles=ADMIN 위와 같이 설정하면 어플리케이션 시작시 자동 설정되던 유저는 사라지고 위의 정보로 세팅된다. roles도 설정되었기 때문에 /admin 페이지도 접근 가능하다 SecurityConfig에 설정하기 @Configuration @EnableWebSecurity public class SecurityC..

스터디-Spring 2022.01.07

[스프링 시큐리티] 스프링 시큐리티 설정하기

스프링 웹 시큐리티 설정 추가 @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .mvcMatchers("/", "/info").permitAll() .mvcMatchers("/admin").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); } } authorizeRequest() -어떻게 요청들을..

스터디-Spring 2022.01.07

[스프링 시큐리티] 스프링 시큐리티 연동

스프링 시큐리티 의존성 설정 pom.xml org.springframework.boot spring-boot-starter-security 스프링 시큐리티가 제공하는 자동 설정이 적용된다. 적용 전의 문제 인증할 방법이 없었다 현재 사용자가 누군지 알 수가 없다 자동 설정( 스프링 시큐리티 의존성을 추가하게 되면) 모든 요청은 인증을 필요로 한다 - 위와 같은 로그인 폼으로 리다이렉트 기본 유저가 생성된다 username: user password: 로그 확인 @GetMapping("/") public String index(Model model, Principal principal) { if (principal == null) { model.addAttribute("message", "Hello Spr..

스터디-Spring 2022.01.07

[스프링 핵심 원리 - 기본편] 컴포넌트 스캔과 자동 의존관계 설정

스프링 빈을 등록하는 2가지 방법 1. 컴포넌트 스캔과 자동 의존관계 설정 2. 자바 코드로 직접 스프링 빈 등록하기 컴포넌트 스캔과 자동 의존관계 설정 1. @Component애노테이션이 있으면 스프링 빈으로 자동 등록된다. 2. @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다. 3. @Component를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다. - @Controller, @Service, @Repository 4. @ComponentScan 애노테이션이 붙은 클래스 기준으로 스캔을 하는데 동일패키지를 포함한 하위 패키지를 스캔하며, 상위패키지나 다른 패키지는 스캔하지 못한다(설정에 따라 달라짐) ※ 스프링은 스프링 컨테이너에 스프링 빈을 등록할..

스터디-Spring 2022.01.03

[스프링 핵심 원리 - 기본편] 스프링이란?

스프링 생태계 1. 스프링 프레임워크 핵심기술 : DI 컨테이너, AOP. 이벤트 등 웹 기술: MVC, WebFlux 등 데이터 접근 기술: JDBC ORM 등 을 아우르는 프레임워크 2. 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성, 내장 Tomcat 지원으로 웹서버를 별도로 설치하지 않아도 됨 Spring starter로 손쉬운 빌드 구성 가능 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 가능 ( 운영 모니터링 등) 관례에 의한 간결한 설정 스프링이라는 단어란 무엇인가 - 스프링 DI 컨테이너 기술 - 스프링 프레임워크, 스프링 부트 모두를 포함한 생태계 스프링은 왜 만들었을까?( 핵심 개념 ) 객체 ..

스터디-Spring 2021.12.28

Querydsl Tech Talk 정리

사내에서 Querydsl에 대해 Tech Talk 진행할 기회가 생겨 준비한 내용을 기록합니다 Querydsl 타입에 안전한 방식으로 HQL 쿼리를 실행하기 위한 목적으로 만들어짐 타입에 안전하도록 도메인 모델을 변경하면 소프트웨어 개발에서 큰 이득을 얻게 됨 도메인 변경이 직접적으로 쿼리에 반영됨 쿼리 작성 과정에서 코드 자동완성 기능을 사용함으로써 쿼리를 더 빠르고 안전하게 만들 수 있게 됨 JPA, JDO, JDBC, Lucene, Hibernate Search, MongoDB, Collections 그리고 RDFBean을 지원 사용하기 도메인 타입 작성(ex: Customer) Querydsl에 의해 자동으로 QCustomer라는 쿼리타입 생성 (JPA의 경우) JPAQuery 인스턴스로 쿼리 작..

Spring 2021.08.10

Git reset hard 취소하기, 되돌리기, 복원하기

git reset --hard는 HEAD(커밋 포인터)의 위치를 변경하는 것 예를 들어 원래의 HEAD의 위치가 d937ea20인데 git reset --hard 4251c50f1 명령어로 reset했다고 해보자. git reflog로 reference 로그를 확인 할 수 있는데(커밋 포인터의 위치 변경 로그 등) 위와 같이 확인 할 수 있다. ( git reset --hard 4251c50f1 명령어를 사용했다는 걸 확인 할 수 있음 ) 이를 원복한다는 의미는 다시 원래의 커밋으로 HEAD를 변경해주면 된다는 의미와 같다. git reset --hard d937ea20a로 원래의 커밋위치로 HEAD를 변경해주면 된다.

프로그래밍 2021.05.04

OpenGraph로 검색엔진 노출, SNS공유 최적화

검색엔진의 로봇의 경우 사이트에 메타데이터가 설정되어 있지 않으면 웹사이트의 내용을 크롤링하여 보여준다. 대체적으로 이상하게 노출된다고 생각하면 된다. 위와 마찬가지로 웹사이트의 내용을 그대로 긁어 보여주기 때문에 사이트의 정체성을 나타내기가 힘들다, 그럼 로봇이 수집할 수 있게 뭐를 설정해야 한단 말인가? html의 기본 메타태그인 title, description은 기본적으로 잡아주는게 좋다. 많은 로봇들이 해당 데이터를 기본정보로 크롤링한다. (네이버-콘텐츠 마크업) 그렇다면 SNS 공유, 메신저 공유(라인, 페이스북, 카카오톡)의 경우는 어떤식으로 노출되는 걸까? 이에 대한 방법중 대중적인 방법이 페이스북의 OpenGraph 프로토콜이다. (Open Graph) OpenGraph란? HTML 문서..

IT Tip 2021.03.09