Practice/Java 13

배열과 링크드리스트

배열이란? 배열은 특정 크기만큼 메모리 공간에 연속적으로 저장하는 자료구조이다. 메모리상에서 연속적으로 저장되어 있는 특징을 갖기 때문에, index로 접근이 용이하다. 배열의 크기는 처음 생성할 때 정하며 이후에는 변경할 수 없다. 삽입/삭제가 오래걸린다. 왜냐하면 데이터를 추가하려고 하는 자리를 비우고 뒤에 있는 데이터를 한 칸씩 뒤로 밀어야 하기 때문이다. 배열 중간의 데이터가 삭제되면, 공간 낭비가 발생한다. 빠른 접근이 요구되고, 데이터의 삽입과 삭제가 적을때 사용한다. 링크드리스트란? 링크드리스트는 여러개의 노드들이 순차적으로 연결된 형태를 갖는 자료구조이다. 첫번째 노드를 head, 마지막 노드를tail이라고 한다. 각 노드는 데이터와 다음 노드를 가리키는 포인터로 이루어져 있다. 이 포인터..

Practice/Java 2023.03.20

테스트코드 공부 참고자료 블로그

https://batory.tistory.com/497 @PersistenceContext 개인 공부 목적으로 작성한 글입니다. 아래 출처를 참고하여 작성하였습니다. 목차 @PersistenceContext 란? @PersistenceContext를 사용해야 하는 이유 1. @PersistenceContext 란? EntityManager를 빈으로 주입할 때 batory.tistory.com ->엔티티 매니저 의존성 주입 받을때 https://go-coding.tistory.com/102 TDD와 BDD에서 사용되는 given/when/then 행동과 실습 [Spring Boot] when(), given(), any() 및 BDD 설명 패스트 캠퍼스 강의를 듣던 도중 테스트 구문 작성 코드에서 처음 보..

Practice/Java 2023.03.06

테스트코드 공부 1

@ExtendWith(mockitoExtension.class) = JUnit과 mockito를 연결해주는 어노테이션 @Mock 어노테이션을 붙이고 의존성 주입할 필드를 넣는다. @InjectMocks : 테스트할 클래스를 넣는다. @Spy : 클래스 안에서 실제로 쓰겠다~ 하는 애들을 넣어준다. @Mock 은 가짜 객체를 만들어 반환해주는 어노테이션이다. @DisplayName : 테스트코드의 이름을 정해준다. 한글지원해서 한글로 이름을 정해줘도 된다. 🧡Given-When-Then 패턴 Given : 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황에 대한 행동을 정의한다. When: 실제 테스트를 하는 메소드가 호출되며 테스트를 통한 결과값을 가져온다. Then: When 단계에서 ..

Practice/Java 2023.03.06

스프링) 의존성 주입

레파지토리를 선언만 해주고 의존성 주입을 해주지 않으면 널값이 들어가게 된다. 의존성 주입은 생성자를 통해서 할 수 있다. 아니면 어노테이션을 달아줘야 한다. @NoArgsConstructor 파라미터가 없는 기본 생성자를 생성 @AllArgsConstructor 모든 필드 값을 파라미터로 받는 생성자를 만듦 @RequiredArgsConstructor final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 만듦 의존성 주입 말로만 듣고 찾아보고 혼자 공부할때는 이해가 안됐었는데 직접 이렇게 널값이 들어가는걸 눈으로 보고 에러를 마주하니까 다시는 의존성주입에 대해 잊지 않을 것 같다. 파이널에 생성자를 꼭 넣어줘야 하는 이유 = 파이널은 변경이 불가능한데 초기화를 안시켜주면 어..? 나 파이널..

Practice/Java 2023.02.16

스프링) JPA 페이징 처리 개념 및 활용방법.

개념 페이징은 사용자가 어떠한 데이터를 필요로 할 때, 전체 데이터 중의 일부를 보여주는 방식이다. JPA 에서는 데이터베이스에서 조회한 결과를 페이지 단위로 나누어 처리할 수있도록 도와주는 page객체로 페이징을 처리한다. public interface RecommendCourseBoardRepository extends JpaRepository { @Query("select rb from RecommendCourseBoard rb where rb.postStatus =:postStatusEnum") Page findAllBySatusIsVailable(Pageable pageable, PostStatusEnum postStatusEnum); } JPA를 상속받은 레파지토리에서 page타입의 안에 엔티..

Practice/Java 2023.02.15

스프링) 빌더 패턴

문제인식 컨트롤러에서 postRequestDto 를 받아와서 엔티티인 Post에 postRequestDto 객체를 바로 넘겨주면 결합도가 높아져서 최소한의 데이터를 넘겨주도록 해야겠다는 생각이 들었다. 따라서 postRequestDto의 데이터 값을을 꺼내서 변수에 지정해 준 뒤 이런 식으로 Post에 하나하나 넣어주었는데 데이터베이스의 데이터가 바르게 들어가지 않고 뒤섞여 들어가는 문제가 발생하였다. Try 뒤섞여 들어갔다는 것은 생성을 할 때 문제가 생겼다는 뜻이니까 생성자를 만들어주었던 Post 객체에 가서 살펴보았더니 생성자를 이렇게 만들었는데 순서가 바뀌어서 레파지토리에 뒤섞여서 저장되었다. 다시 바르게 입력하여 저장하면 바르게 잘 들어가지만, 생성자에 들어가야 할 데이터들이 많을 경우 분명히 ..

Practice/Java 2023.01.17

스프링)시큐리티

오늘 공부한 내용 'Spring Security' 프레임워크는 스프링 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 준다. 시큐리티를 사용하지 않으면 자체적으로 세션을 체크해야 하고 리다이렉트를 일일이 설정해주어야 한다. 스프링 시큐리티는 서블릿 필터를 기반으로 동작하는데, 요청이 들어오면 인증과 권한을 위한 필터들을 통과한다. HTTP 기본 인증을 요청하면 BasicAuthenticationFilter를 통과한다. HTTP Digest 인증을 요청하면 DigestAuthenticationFilter를 통과한다. 로그인 폼에 의해 요청된 인증은 UseerPasswordAuthenticationFilter를 통과한다. x509 인증을 요청하면 X509AuthenticationFilter를 통과한다..

Practice/Java 2022.12.30

스프링) @Transactional 정리

오늘 공부한 내용 @Transactional 1. 트랜잭션의 성질 ▶ 원자성(Atomicity) - 한 트랜잭션 내에서 실행한 작업들은 하나로 간주한다. 즉, 모두 성공 또는 모두 실패. ▶ 일관성(Consistency) - 트랜잭션은 일관성 있는 데이타베이스 상태를 유지한다. (data integrity 만족 등.) ▶ 격리성(Isolation) - 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다. ▶ 지속성(Durability) - 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다. 2. 스프링에서 트랜잭션 처리 방법 스프링에서는 트랜잭션 처리를 지원하는데 그중 어노테이션 방식으로 @Transactional을 선언하여 사용하는 방법이 일반적이며, 선언적 트랜잭션이라 부른다...

Practice/Java 2022.12.19

스프링 코드 분석) 메모장 만들기 프로그램

오늘 분석할 코드 controller 패키지 더보기 MemoController.java package com.example.hanghaememo.controller; import com.example.hanghaememo.dto.MemoRequestDto; import com.example.hanghaememo.entity.Memo; import com.example.hanghaememo.service.MemoService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util..

Practice/Java 2022.12.08

JDK,JRE,JVM 자바 프로그램의 구동 원리.

오늘 공부한 내용 자바 코드가 실행되는 과정: 1. 개발자가 코드를 입력한다. 2. 자바 컴파일러가 개발자가 입력한 코드를 바이트 코드로 변환한다. 3. JRE 가 먼저 프로그램 안에 main() 메서드가 있는지 확인하고, main() 메서드가 있으면 JVM에 전원을 넣는다. 3.JVM은 java 패키지를 T 스태틱 영역에 올린다. 그리고 개발자가 만든 모든 클래스와 import 패키지를 스태틱 영역에 올린다. 4. 이제 차례로 메서드를 스택 또는 힙 영역에 올리며 메서드를 실행한다. JDK (Java Development ToolKits) : JDK는 자바 개발도구 이다. JRE 나 개발을 위해 필요한 도구들을 포함한다. Java로 된 언어를 컴파일 하고 개발할 수 있게 도와주는 개발환경의 세트이다. ..

Practice/Java 2022.12.01