10월 31일

Yullgiii·2023년 10월 31일
0
post-thumbnail

내일 배움 캠프

이제 스프링 주간으로 들어서서 새로운 강의와 새로운것을 배우게 된다!!!!
자바를 할떄는 그나마 객체지향이라는것의 개념은 알았지만 이건....완전한 멘땅이라 조금 걱정이된다,...우짜징?

Spring

0강 웹동작 방식 이해하기

기본적인 웹의 동작방식과 어떤식으로 해결해야하는지 어떤식으로 이끌어가는지에 대한 내용이였다.
웹프로토콜중 HTTP가 가장 많이 사용되는데 쉽고 젤 편하기 때문이다!
API(application programming interface) => 어렵네 말이 길어...
웹API는 클라이언트와 웹리소스 사이의 게이트웨이!!!!

오호,,,,요즘은 백과 프론트가 확실하게 나누어져서 발전을 해와서 느슨하게 결합하는게 대세라는데,....왜지? 그럼 찾아봐야지~

느슨한 결합 (loosely coupled)

  • 시스템 구성요소가 서로 약하게 연결 되어 관계를 뗴어낼수있고 그때문에 한 구성요소에 변화가 생기면 다른 요소에 최소한의 영향을 끼치는 상태!!!
  • 요소ㅓ의 정의에 대해 많은 지식이 없이도 사용 할수있는 상황!!

쉽게 이해하자면 내가 코드를 바꾸었읐대 그 여파를 줄이는 것이라고 생각하면 될듯하다!

자 그럼 다시 다음 부분으로 넘어가보자고!
RESTful API...api가 적절하게 잘 설계된거를 이렇게 부르는거라는데 이거는 좀 더 지나면 공부를 하다보면 알게 되는 개념이라고 한다.

기존의 동작방법과 요청의 도달 상태 그리고 어떻게 저장하는지에 알게되는 강의였다.

Spring Boot 및 서버 이해

소프트웨어 디자인 패턴
디자인 패턴들은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책

각 계층으로 나누어져있다!!
Presentation 층 : 상호작용을 하는 처리계층
Domain 층 : 논리 계층(핵심로직,도메인과 관련된 작업을 담당)
Data Access 층 : DAO계층 데이터 접근 계층

Database 와 SQL

용어 정리!
DBMS : 데이터베이스를 관리하고 운영하는 소프트웨어
RDBMS : 관계형 데이터베이스

SQL

  • DDL : 테이블이나 관계구조를 생성하는데 사용
  • DML : 테이블의 데이터를 검색 ,삽입, 수정, 삭제 사용

SQL 연습해보기!!!

해봤는데 안된다...
하 강의 이번 좀 마음에 안든다...그냥 줄줄 읽어줄뿐이지 진짜 전혀 안되는데 버젼이 업데이트 된게 아닌가?뭐가 달라서 전혀 실행이 안되는지 모르겠다.그리고 강의의 질이 확 떨어짐을 느낀다..
이거 그리고 예전에 다 했던 내용이다,,,,모든 내용이 이미 다 했던내용인데...
예전이 설명을 훨씬 잘해주신다...
이 인텔리제이로 이용하는것 넘복잡하고 화가난다!!!!
하지만 구글링과 모든 방법을 동원해서 어떻게든 하기는했다는것에서 만족감...
하지만 짜증...

JPA 기초

어플리케이션이 데이터베이스를 직접 다룰 때의 문제점
1.귀찮아진다..계속 쿼리 만들고 빡시게 굴리고 어휴...쉽지않아..
2.너무 의존을 해서 변경하기에 이상해진다.
JPA: Java Persistence API
자바 ORM 기술에 대한 표준 명세

영속성 컨텍스트

JPA(Java Persistence API)에서 영속성 컨텍스트(Persistence Context)란 엔티티(Entity)를 영구 저장하는 환경

엔티티(Entity) 매니저

엔티티 매니저(Entity Manager)를 통해 영속성 컨텍스트에 접근할 수 있으며, 엔티티 매니저는 영속성 컨텍스트(Persistence Context)내에서 엔티티(Entity)를 관리
비영속(new/transient) : 영속성 컨텍스트와 상관 없이 단순히 객체를 생성한 상태를 말한다.
준영속(detached) : 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 상태를 말한다.
삭제(removed) : 영속성 컨텍스트를 삭제한 상태를 말한다.

드디어 프로젝트를 해볼수있는 메모 프로젝트

들어가기에 앞서서
jQuery

  • jQuery는, 미리 작성된 자바스크립트 함수 모음집
  • 되게 많이들 쓰는 HTML, CSS 조작 함수를 미리 만들어서 제공
  • 우리는 다 스스로 만들 필요 없이 사용법만 인지하기

스프링 MVC 이해

  • MVC (Model - View - Controller) 디자인 패턴

정적 (static) 웹 페이지

  • Controller
  1. Client 의 요청을 Model 로 받아 처리
    예) 회원가입을 위한 개인 정보들 (id, password, name)
  2. Client 에게 View (정적 웹 페이지, HTML) 를 내려줌

동적 (dynamic) 웹 페이지

  • Controller
    1. Client 의 요청을 Model 로 받아 처리
    2. Template engine 에게 View, Model 전달
      1. View: 동적 HTML 파일
      2. Model: View 에 적용할 정보들
    3. Template engine
      1. ViewModel 을 적용 → 동적 웹페이지 생성
        1. 예) 로그인 성공 시, "로그인된 사용자의 id" 를 페이지에 추가
        2. Template engine 종류: 타임리프 (Thymeleaf), Groovy, FreeMarker, Jade 등 (스프링에서 JSP 이용은 추천하지 않고 있음)
    4. Client 에게 View (동적 웹 페이지, HTML) 를 내려줌

각자의 실습을 통하여 알아보았다.아래를 클릭하면 갈수있으니 복습은 스스로!
GitHub

메모 프로젝트

메모 프로젝트를 이제 강의를 들으며 만드는데는 지장이 전혀 없었는데 한부분!!!!

    @Transactional(readOnly = true)
    public List<Memo> getMemos() {
        return memoRepository.findAllByOrderByModifiedAtDesc();
    }

이부분에서 오류가 발생을 하는것이였다.
readOnly부분이 오류가 있었는데.
인포트의 문제였다 설명이 잘 나와있지는 않았지만 찾아본 결과로는
Jakarta의 @Transactional 애노테이션에는 readOnly 속성이 없기떄문이였다....
젠장...

    @org.springframework.transaction.annotation.Transactional(readOnly = true)
    public List<Memo> getMemos() {
        return memoRepository.findAllByOrderByModifiedAtDesc();
    }

코드를 위와 같은 형식으로 변경해 주고 인포트도 아래와 같은 형식으로 변경을 해주니 문제를 아주 깔끔하게 해결할수있었다!!!
import org.springframework.transaction.annotation.Transactional;
readOnly를 쓸때에는 주의사항이 있는데!!
1.글자 그대로 읽기전용 작업에만 적용: 이 속성은 데이터를 읽는 작업에만 적용해야하는데 데이터를 변경하는 작업에 적용하면 예상치 못한 결과가 발생할 수 있다고 한다.데이터베이스에 따라 변경 작업이 무시되거나 에러가 발생할 수 있다고도 한다...무섭.,..

2.트랜잭션 격리 수준: readOnly 속성은 트랜잭션의 격리 수준에 따라 다르게 동작할 수 있다. 일부 데이터베이스는 특정 격리 수준에서만 읽기 전용 트랜잭션을 지원

3.성능 향상 기대: readOnly를 사용하면 일부 데이터베이스에서 성능 향상이 이루어질 수 있지만!!! 데이터베이스, 드라이버, JPA 제공자 등에 따라 크게 달라질 수 있다.

4.Hibernate 사용 시: Hibernate를 사용하는 경우, @Transactional(readOnly = true)는 1차 캐시를 비우지 않아 세션에서 반환된 객체를 변경하더라도 데이터베이스에 반영되지 않는다.

다시듣기의 불상사

강의가 리뉴얼 되는 과정중에 지급이 된것이였어서 다시 들어야하는 불상사가 발생했다..ㅎㅎ
어쩐지 너무 초급입문이라고 했는데 불친절하다는 강한 느낌을 받았는데...
잘못된강의 지급이였다..

그럼 어쩌겠는가 다시들어야지 ㅎㅎ
다시 들으러 가보자고...

Spring 입문 1주차강의!

그렇지 이게 맞지...
완전 처음부터 세세하게 알려주신다 ㅜㅜ 아까 강의가 이상했던거였어!!!
그리들 부터 서버 그런 세세한것부터 다 알려주시니 훨씬 쉬워졌다...
아까의 같은 강의인데 아까는 정말 중간중간 다 짤려서 넘어가는식의 강의였다면 이번강의는 처음부터 다 설명을 용어까지 정리를 해줘서 이해가간다...
API가 뭔지도 모르는사람이 있을수있는데 이제는 확실히 알려주시니 이해가 가고 후반부에 있을 내용들이 달라지기에 훨씬도움이 많이된다...

회고

오늘도 몇몇의 이슈들이 있었지만 아쉬운점이 있다면 알고리즘을 풀지 못했다는것이다
뭔가 새로운 조 새로운 강의들이 제공되고 시작을 해야함에 있어서 어수선한 마음도 있었지만
잘못된강의지급도 큰 이슈였다고 본다!!!
하지만 내일은 또 강의를 들으면 되는것이니까!!!열심히 달려보자고!!!!!!!!!!
내일까지 다 들어야지 목금 개인일정으로 자리를 비워야하니 열심히 달려야한다!!!!!

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글