전체 글

잊지 않기 위해 자유롭게 기록하는 공간입니다.
Java

[Java/자바] stream, map, collect

Stream 자바의 Stream은 java8에 추가된 기능으로 컬렉션에 저장된 요소들을 람다식으로 처리 할 수 있게 하는 코드패턴이다. for문과 if문을 사용하지 않고도 간결하게 코드를 변경 할 수 있다. 원본 데이터를 읽는데, 원본데이터 변경을 하지 않는다. 결과를 컬레션이나 배열에 담아 반환 할수있다. Map() map() 메서드는 값을 변환해주는 람다를 인자로 받아, 조건에 맞게 새로운 데이터를 반환 할 때 사용된다. Collect() Stream 데이터를 원하는 자료형으로 변환 해준다. 예를들어, collect(Collectors.toList()) 는 List형으로 자료형을 변환해준다. 아래는 예시 코드이다. @Override public void findAll(Model model) { Lis..

Spring Framework

[Spring Security] 회원가입, 로그인 구현(2) - 회원가입

이전 게시물에서 로그인 기능을 구현했다. 이제 회원가입을 구현해보자. 먼저 회원가입시 받을 정보들을 DTO로 구성했다. 그리고 builder를 사용해 MemberEntity에 저장했다. @Setter public class MemberRegDTO { private String email; private String pass; private String name; public MemberEntity ent(PasswordEncoder pe) { return MemberEntity.builder().email(email).pass(pe.encode(pass)).name(name).build(); } 그리고 ServiceProcess에 회원가입을 위해 DTO를 저장시키는 메서드를 구성했다. 참고로 Member..

Spring Framework

[SpringBoot] CSRF 란?

CSRF 란? Cross-Site Request Forgery의 약자로 크로스 사이트 요청 위조 공격이다. 1. 인증/인가 - 인증 : 사용자의 정당성 확인 - 인가 : 사용자의 리소스 접근에 대한 제어 2. 세션 관리 - Session을 이용한 공격에 대한 보호, Session 라이프 사이클 제어 3. CSRF 방지 - CSRF(Cross-Site Request Forgery)로부터 보호 외의 다양한 기능이 있다.

Java

extends와 implements 차이

객체지향 OOP(Object-Oriented Programming)의 특징 중 상속성에 관한 이야기이다. 프로젝트를 진행하며 자주 사용하게 되었는데 차이점이 궁금하였다. extends 부모 객체에서 선언, 정의를 모두 한다. 자식에서 오버라이딩을 할 필요가 없다. 부모의 메소드, 변수를 그대로 사용 가능하다. 나의 경우에는 프로젝트를 진행할때 - entity를 구성시 계속 중복되는 필드들을 따로 class에 담아 extends해 주는 방식으로 자주 사용하였다. - Repository 를 사용할때 extends JpaRepository를 하여 JPA에서 기본으로 제공하는 메서드를 이용했다. implements 부모 객체는 선언만 한다. 자식에서 정의를 하는 오버라이딩(재정의)가 필요하다. 나의 경우에는 -..

Spring Framework

[Spring Security] 회원가입, 로그인 구현(1) - Entity 생성

SpringBoot프로젝트에서 회원가입 기능을 구현하고 로그인 기능을 구현해 보고자 한다. 첫 단계로 회원 entity를 구성해주었으며 db는 mariaDB를 이용했다. @SequenceGenerator(name = "seq_gen_mem", sequenceName = "seq_mem", allocationSize = 1, initialValue = 1) @AllArgsConstructor @NoArgsConstructor @Builder @Getter @Table(name = "member") @Entity public class MemberEntity { @GeneratedValue(generator = "seq_gen_mem", strategy = GenerationType.SEQUENCE) @Id..

SpringBoot Project

[SpringBoot] 게시물 수정, 삭제 작성자일 때만 가능하게 하기(thymeleaf 이용)

게시물을 작성하고 나서 작성자만 게시물을 수정, 삭제 버튼이 보이도록 구현을 하고자 한다. 또한, 삭제는 ADMIN(관리자) 권한이 있을때도 가능하게 하였다. 참고로 아래 코드의 detail은 Model에 저장된 데이터의 지정된 이름이다. 우리의 프로젝트에는 principal이 writerId로 설정되어있다. 게시물 수정 thymeleaf if문을 이용하여 조건에 맞을때만 수정버튼이 보이도록 해주었다. 아래는 삭제버튼을 구현한 부분이다. 게시물 삭제 if문을 보면 수정버튼과 다르게 #authorization.expression('hasRole(''ROLE_ADMIN'')') 조건을 추가해줘서 관리자 Role이 부여되었을때 버튼이 보이게 해주었다.

SpringBoot Project

[SpringBoot] 게시판 Pagination(Pageable 이용한 페이징), 리스트 불러오기

게시판 페이징을 구현하여 게시글 리스트를 불러오려고 한다. 아래의 사진과 같이 구현하고자 하였다. 게시물 5개씩 불러오기 Pagination 부분에 7개 고정하기 먼저 Board Entity에서 리스트로 끌어올때 필요한 정보들을 모아둔 DTO를 구성했다. @Getter public class BoardListDTO { private long bno; private String title; private int readCount; private String writer; private LocalDateTime updatedDate; private LocalDate toDay; private String writerId; //Entity를 -> BoardListDTO(BoardEntity ent) publi..

SpringBoot Project

[SpringBoot] 게시판 게시물 조회수 기능

게시물을 클릭하면 조회수가 증가하는 쿼리를 추가해 주려고 한다. 우선 엔티티에 조회수 컬럼을 넣어주고 private int readCount; //BoardEntity 에 있는 조회수 컬럼 그리고 이제 repository에 조회수 증가 쿼리를 작성해주었다. @Modifying @Query("update BoardEntity b set b.readCount = b.readCount +1 where b.bno = :bno") //entity 의 readCount를 업데이트하는 쿼리 int updateReadCount(@Param("bno")Long bno); 나같은 경우는 @Param("bno") 를 추가하지 않으면 실행이 되지 않아 추가를 해주었다. 그리고 service process에 아래와 같이 메소드..

꿈꾸는야오옹
종합장