본문 바로가기

개발 일지

[WIL]이노베이션 캠프 2주차

https://k-sky.tistory.com/16

 

[TIL]이노베이션 캠프 8일차

1. 과제 진행 상황 조별과제는 알고리즘(코딩테스트) 28문제 해결하고 스터디하기 -> 조원 4명이 7문제씩 자기 담당 문제 정해서 해결하고 어려운부분 공유하는 방법으로 진행 개별로 코드짜고 깃

k-sky.tistory.com

https://k-sky.tistory.com/18

 

[TIL]이노베이션 캠프 9일차

1. 개발 진행 상황 2. 개발 중 발생한 이슈와 해결 3. 새로 배운 것 이클립스에서 자바 프로그램 작성하는 순서 프로젝트 생성: 메뉴 File -> New -> Java Project 클래스 생성: 프로젝트 이름 위 우클릭 ->

k-sky.tistory.com

https://k-sky.tistory.com/19

 

[TIL]이노베이션 캠프 10일차

1. 개발 진행 상황 2. 개발 중 발생한 이슈와 해결 3. 새로 배운 것 메서드의 호출 메서드명(값1, 값2,...); //메서드를 호출하는 방법 print99danAll(); / void print99danAll()을 호출 int result = add(3,5); /..

k-sky.tistory.com

https://k-sky.tistory.com/20

 

TIL]이노베이션 캠프 11일차

2주차 개인과제 Java로 주어진 요구조건에 맞는 클래스 설계 1. 과제 진행 상황 자바 기본 문법에 대해 계속 공부중 공부한것과 구글링을 통해 과제 완성 https://github.com/kimskyyyy/sparta/tree/main/week2 G.

k-sky.tistory.com

https://k-sky.tistory.com/21

 

[TIL]이노베이션 캠프 12일차

1. 개발 진행 상황 2. 개발 중 발생한 이슈와 해결 3. 새로 배운 것 JPA가 무엇인가요? - JPA(Java Persistence API) 자바 객체와 데이터베이스 테이플간의 매핑처리를 하는 ORM(Object Relational Mapping)기술 -..

k-sky.tistory.com

https://k-sky.tistory.com/22

 

[TIL]이노베이션 캠프 13일차

1. 개발 진행 상황 2. 개발 중 발생한 이슈와 해결 Web server failed to start. port 8080 was already in use에러 -> 포트가 이미 실행 중일 때 스프링을 Run하면 발생하는 에러 Web server failed to start..

k-sky.tistory.com

https://k-sky.tistory.com/23

 

[TIL]이노베이션 캠프 14일차

1. 개발 진행 상황 2. 개발 중 발생한 이슈와 해결 ARC URL연결 문제 The requested URL can’t provide a secure connection The URL sent an invalid response. Learn more about this problem. net::ERR_SSL_..

k-sky.tistory.com

 


<복습>

1. 인텔리제이 > New Project 

  • Group: com.sparta
  • Artifact: week00
  • Type: Gradle
  • Language: Java
  • Java Version: 11

  • Lombok
  • Spring Web
  • Spring Data JPA
  • H2 Database
  • MySQL Driver

2. main > java > com.sparta.week00 > Week00Application.java를 Run하고 크롬에서 http://localhost8080 접속하여 연결 확인

 

3. Repository 만들기

src > main > java > com.sparta.week00 > domain 패키지 생성

> Memo.java, Timestamped.java, MemoRepository(인터페이스), MemoRequestDto.java 순으로 생성

더보기

 Memo.java

@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String contents;

    public Memo(String username, String contents) {
        this.username = username;
        this.contents = contents;
    }

    public Memo(MemoRequestDto requestDto) {
        this.username = requestDto.getUsername();
        this.contents = requestDto.getContents();
    }
}

Timestamped.java

더보기
@MappedSuperclass // Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
public class Timestamped {

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedAt;
}

MemoRepository.java 인터페이스

더보기
public interface MemoRepository extends JpaRepository<Memo, Long> {
	List<Memo> findAllByOrderByModifiedAtDesc();
}

MemoRequestDto.java

더보기
@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}

4. Service 만들기

src > main > java > com.sparta.week00 > service 패키지 생성 > MemoService.java 생성

 

MemoService.java

더보기
@RequiredArgsConstructor // final로 생성된 것을 필수로 꼭 넣어주도록 도와줌
@Service //Service라는것을 스프링에게 알림
public class MemoService {

    private final MemoRepository memoRepository;
    // final MemoRepository를 필수로 사용해야한다고 알리는 것
    // find를 하기 위해서는 Repository필요하기 때문에 생성

    @Transactional // DB반영 하라는 어노테이션
    public Long update(Long id, MemoRequestDto requestDto) {
    // 반환타입: Long, 메소드명: update, 재료:(기본키)id와 변경시킬 내용에 대한 정보 MemoRequestDto형 변수명 requestDto 
        Memo memo = memoRepository.findById(id).orElseThrow(
        // find를 하기 위해서는 Repository 필요
                () -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
                // NullpointerException: 포인터가 가르키는것이 없다
                // IllegalArgumentException : Argument=파라미터(전달받는 값)잘못 됨
        );
        memo.update(requestDto);
        return memo.getId();
    }
}

Memo.java에 update 메소드 추가

더보기
public void update(MemoRequestDto requestDto) { 
// 반환값 없어도 되서 void 사용, Service에서 전달 받기로 한 값 MemoRequestDto
    this.username = requestDto.getUsername(); // 전달 받은 Dto의 값을 findbyId로 찾은 Memo안에 넣음
    this.contents = requestDto.getContents();
}

5. Controller 만들기

src > main > java > com.sparta.week00 에 controller 패키지 생성 > MemoController.java 생성 > 

Create/Read/Delete 코드 추가

 

더보기
@RequiredArgsConstructor
@RestController
public class MemoController {
    private final MemoRepository memoRepository;
    private final MemoService memoService;
    
    @PostMapping("/api/memos")
    public Memo createMemo(@RequestBody MemoRequestDto requestDto) 
    {Memo memo = new Memo(requestDto);
    return memoRepository.save(memo);
    }
    
    @GetMapping("/api/memos")
    public List<Memo> getMemos() {
    return memoRepository.findAllByOrderByModifiedAtDesc();
    }
    
    @DeleteMapping("/api/memos/{id}")
    public Long deleteMemo(@PathVariable Long id) {
    memoRepository.deleteById(id);
    return id;
    }
    
    @PutMapping("/api/memos/{id}")
    public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
    memoService.update(id, requestDto);
    return id;
    }

}

6. ARC로 기능 확인

기능 Method URL  
(조회) 빈 목록 반환 GET http://localhost:8080/api/memos  
(생성) 신규 메모 생성 POST http://localhost:8080/api/memos Headers: Content-Type - application/json
(조회) 신규 메모 조회 GET http://localhost:8080/api/memos  
(삭제) 신규 메모 삭제 DELETE http://localhost:8080/api/memos  
(조회) 빈 목록 반환 GET http://localhost:8080/api/memos/1  

신규 메모 생성 Body

더보기
{
  "username": "avfnek2",
  "contents": "첫 번째 메모"
}

<2주차 키워드>

  • 객체지향 프로그래밍(Object-Oriented Programming, OOP): 속성과 기능(동작)을 가진 현실 세계의 객체를  기본 단위로하여 이들의 상호작용으로 서술하는 방식
  • JVM(Java Virtural Machine): 자바 가상 머신, java는 특정 OS에 종속적이지 않음. 그 이유는 OS위에 JVM에서 java를 인식하고 실행하기 때문임

참고 레퍼런스

https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80

 

[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)

JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되

doozi0316.tistory.com

https://lxxyeon.tistory.com/86

 

객체지향(OOP) VS 절차지향(PP) 프로그래밍

객체지향, 절차지향 프로그래밍의 정의, 특징, 장단점, 종류에 대해 알아보고 비교해보자 그전에, 🔥 간단 이해 🔥 ✔️ 절차식 방법은 프로그램을 위 그림같이 데이터와 기능(함수)으로 나누

lxxyeon.tistory.com

 


  • 2주차 회고

1주차 보다는 난이도가 낮음

-> but.....조금 더 수월한건 맞지만 알고리즘과 자바 둘 다 따라가기 약간 벅찼다..

 

코딩 테스트 제출 미완료

-> 개별 과제에 집중하느냐 알고리즘 공부를 놓치고 있기도했고... 어쨋든 java를 그냥 내가 못한다.. 다음주에는 java에 시간 더 써야지...