오늘 공부한 내용

  • Spring 숙련주차 1주차 시청 
  • 개인과제 확인
  • Spring 입문주차 2추가 재시청

어려웠던 내용

1. 인증과 인가

- 인증의 구조 방식

 

새로 알게된점

1. Bean 수동 등록 과 같은 타입의 Bean이 2개이상 일 경우 처리

  • Bean 수동등록

Bean으로 등록하고자 하는 객체를 반환하는메서드 위에 @Bean 을 추가하면 되는데 이후 이 Bean을 등록하는 메서드가 속해있는 해당 Class 위데하가 @Configuration 을 추가하면 된다. 

@Configuration
public class PasswordConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

 

  • Bean이 2개이상 일 경우 

3가지의 방법이 있으며

등록된 Bean 이름을 명시하여 사용하는 방법

@Primary 를 Bean 위에 추가하여 해당 Bean을 우선순위를 주는방법

@Qualifier 를 Bean 위에 추가하고 주입하고자 하는 필드에도 @Qualifier("Bean이름") 을 추가하는 방법

구성된다.

 

* @Primary, @Qualifier는 Bean에 우선순위를 적용하는 것이며 @Qualifier가 우선순위가 더 높다

 

 

 

 

2. 인증과 인가의 차이점

  • 인증(Authentication)
    • 인증은 해당 유저가 실제 유저인지 인증하는 개념입니다.
    • 여러분의 스마트폰에 지문인식, 이용하는 사이트에 로그인 등과 같이, 실제 그 유저가 맞는지를 확인하는 절차 입니다.
  • 인가(Authorization)
    • 인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념입니다. 예를들어 관리자 페이지-관리자 권한 같은 것들을 들 수 있습니다.

 

 

오늘의 느낀점

오늘 스프링 입문주차 2주차 내용을 다시 시청하면서 공부하는데 위주로 했다.

JPA와 Entity에 대해 많이 미숙하다보니 더 더욱 신경 써야 할거 같다.

스프링 숙련주차 내용 초반부분은 개념 부분이라 어렵지는 않는데 이후 점점 어려워 질거같다.

오늘 공부한 내용

  • Spring 입문주차 2주차 시청 
  • 코딩테스트 문제풀기

어려웠던 내용

1. Query Methods

 

 

새로 알게된점

1. Query Methods

- JPA의 Repository 인터페이스에서 지원되며, 메소드 이름을 분석하여 쿼리를 자동으로 생성함.

데이터베이스에 있는 자료에서 데이터를 순차적 정렬을 하거나 원하는 정보 데이터만 찾고 싶을때 Repository 에서 메서드 이름으로 쿼리를 생성하여 사용한다.

public interface MemoRepository extends JpaRepository<Memo, Long> {
    List<Memo> findAllByOrderByModifiedAtDesc();
    List<Memo> findAllByContentsContainsOrderByModifiedAtDesc(String keyword);
}

위에 예시의 코드 의미는 List<Memo> 안에 들어있는 자료중 find...By로 조회를 select한후 안에All 넣어 모든 범위를 대상으로 한다 이후 OrderBy는 순서정렬에 대한 내용이며 ModifiedAt이라는 필드데이터를 의미, Desc는 내림차순을 말한다.

즉 ModifiedAt이라는 필드데이터를 기준으로  정렬(OrderBy) 해서 전체데이터를 내보낼건데(findAllBy) 이를 내림차순(Desc)으로 할것입니다.

 

밑에 추가 예시는 꼭 자료전체 뿐아니라 뒤에 keyword를 넣어서 특정 단어가 들어가 있는 데이터를 찾게 하도록 하는 것도 가능하다.

 

오늘의 느낀점

하나의 프로젝트를 완성하기 위해서 적용해야 할 기술이 정말 많은거 같다.

간단하면서 편리하게 사용하기 위해 만든 기술이지만 이해를 못하면 오히려 더 어렵게 느껴지고 헷갈려 구분이 안가게 된다.

이번에도 한가지 기능을 이해하기위해서 부수적인 것을 찾으면서 적용하다보면 점점 더 알아야 할게 많아지다보니 JPA를 공부하면서 정말 공부해야할 것이 많다는것을 새삼 깨닫게 됬다.

 

오늘 공부한 내용

  • Spring 입문주차 2주차 시청 
  • 베이직반 특강 / 데이터 베이스와 ORM
  • 코딩테스트 문제풀기

어려웠던 내용

1. SpringBoot의 JPA

 

 

새로 알게된점

1. 베이직반 특강

- 데이터베이스 스키마 설계 : 기존 영상강의에서 설명이 이해가 안가던 중간중간 단어들에 대해서 정확하게 할게되었다.

- 스키마 : 데이터베이스의 구조를 정의하는 틀

- 테이블 : 관계형 데이터베이스가 데이터를 저장하는 구조

- 열(Column)과 행(Row) : 테이블 안에 저장되는 데이터의 형식

  • 열은 데이터베이스의 필드를 나타내며, 각 열은 해당 데이터 유형의 속성을 지님
  • 행은 실제 데이터가 저장되는 곳이며, 데이터베이스에서 하나의 '레코드'가 됨

2. 코딩테스트

- 두 수의 차, 두 수의 곱, 몫 구하기, 나이출력  / 4문제 해결

- 내가 작성한 코드가 정답은 아니며 나보다 더 효율좋은 코드들이 있다.

  •  

  

오늘의 느낀점

특강을 들으며 처음 스프링 2주차 강의를 들으며 영상이나 자료에서 다소 엉성하게 넘어갔던 부분에 대해서 듀터님이 세세하게 설명하며 개념을 확실하게 다잡았다.

시간에 쫓겨서 다소 이해못해도 다음강의후 넘어가다보니 후반부에 들어서 더욱더 이해가 안됬는데 초반 개념에대해 자세히 알려주시기 이제는 이게 왜이랬는지 얼추 이해가 된다.

코딩테스트에 대해서 처음 알게되었고 오늘 4문제를 풀었다.

난이도도 낮고 Java초반 개념은 잡혀있어서 금방 풀겠지 했는데 막상 해보니 적잖은 시간이 걸렸으며 끝나고 다른사람 풀이까지 확인해보니 더욱 정확하며 간편한 코드들이 다양한 모습으로 있는걸 확인했다.

앞으로도 지속적으로 문제를 풀어나가면 도움이 될거 같다.

오늘 공부한 내용

  • Spring 입문주차 2주차 시청 
  • 알고리즘 특강

어려웠던 내용

1. Entity에 대한 이해

- DB를 보다 쉽게 다루기 위하여 사용되는 JPA에서 관리되는 객체를 의미

- 하지만 실제 코드를 보면서 따라해봐도 뭐가뭔지 잘 모르겠다.

2. 영속성 컨텍스트

-  Entity 객체들이 저장된 공간을 의미

 

새로 알게된점

1. 포인터 / C 언어

포인터란 변수의 메모리 공간의 주소를 가리키는 변수 이다.

변수명 앞에 *를 붙이면 된다.

✔️ 포인터 변수 선언

int a = 123;
int *p = &a; // &a 는 int a의 주소값
  • 주소 연산자(&)는 변수의 이름앞에 사용하여, 해당변수의 주소 값을 반환하며 변수 a에 &를 붙힘으로 a의 주소값을 의미
  • int *p = &a; 처럼 선언할 때에는 변수명(p) 앞에 *를 붙혀서 포인터 변수임을 명시
  • 선언한 이후에 *p라고 쓰게 되면, 포인터 변수 p가 가리키는 주소의 값을 의미. 즉 123가 된다
  • 즉 a 와 *p는 같다. (a에 저장된 값 = 123, * p가 가리킨 주소에 있는것 = 123)
  • &a 와 p는 같다. (a의 주소 값 = 10000, p가 가리키는 주소 = 10000)

중요 ! 자바에는 왜 포인터가 없을까?

  • 자바에는 참조(Reference)가 있기 때문
  • 포인터 vs 참조
    • 포인터: 메모리를 직접 핸들링 할 수 있음
    • 참조: 메모리를 직접 핸들링할 수 없음
  • 포인터는 주소값을 임의로 변경가능하며 유연성과 성능을 향상시킬수 있지만 안정성이 떨어져 개발자가 실수하면 바로 에거로 이어질 수 있다. Java에서는 개발자의 실수를 방지하기 위해 자바가 메모리 영역을 관리한다.
  • GC(Garbage Collector)가 실행될 때 마다 Heap 영역의 객체의 주소가 계속 바뀌기 때문 (자바가 관리)
    • 더이상 stack에서 참조되지 않는 Heap 영역의 객체들은 GC가 제거

  

오늘의 느낀점

금일 특강에서는 알고리즘 처리방법, C언어에 대한 간단한 설명 을 해주었는데 현업에서도 자바 뿐만 아니라 컴퓨터의 근본이었던 C언어에 파이썬 등 다양한 언어까지 사용되니 개발자는 끊임없이 공부를 해야한다는 튜더님의 말씀을 들으며 참 갈길이 멀구나라는걸 느꼈다.

자바도 어렵게 느껴지는데 C언어는 정말 복잡한 구조였겠구나라고 생각이 든다.

그래도 나중에 따로 공부해 봐야지...

 

오늘 공부한 내용

  • Spring 입문주차 2주차 시청 
  •  

어려웠던 내용

1. Controller - Service - Repository 분리하기

- 분리과정이 잘 이해가 안된다.

2. IOC와 DI

- IOC컨테이너에서 직접 Bean을 가져오는 경우가 어렵다.

 

새로 알게된점

1.  업무의 세분화를 위하여 크게 Controller - Service - Repository 형태로 구분하니 확실히 코드가 깔끔해지고 가독성이 높아졌다.

 

 

오늘의 느낀점

기존 영상에서 만들던 메모장 프로젝트에서 하나의 클래스에서 3구분으로 나누어서 처리하는걸 보니 확실히 이렇게하면 추후 다른사람이 코드확인이 편리하다는걸 느낄수 있었다.

또 IOC에서 그동안 선배님들의 스프링프레임워크의 지속적인 개량으로 대부분을 자동적으로 Bean처리하여 코드작성에 편리함을 더해준다는것을 알았지만 영상에서 말한대로 오히려 편리함떄문에 이게 왜 들어가고 적용되는지 이해가 안된다. ㅠㅠ

오늘 공부한 내용

  • Spring 입문주차 1주차 시청 
  • 개인과제 작성

어려웠던 내용

1. Path Variable, Requset Param

2. Create, Read, Update, Delete 구현

 

 

새로 알게된점

1.  Datebase, SQL에 대해 정확히 알게 되었다.

-  정보를 저장하는 장소인 Datebase에 원하는 정보의 구조로 조작,관리 하기 위해 사용되는 언어가 SQL이다.

 

 

오늘의 느낀점

금일 영상을 보면서 Create, Read, Update, Delete 구현을 최대한 이해하는데 중점을 공부했다.

영상에서 메모장을 만들면서 실습했는데 웹페이지에서 필요한 기능을 Spring은 간단한 명령어로 적용하는 것을 보면서 확실히 JavaScript보다는 높은 편의성을 가지고 있다는걸 느꼈다.
아직 제대로 적용못하고 이해가 안되지만 이를 Java언어로 작성시 얼마나 손이 많이가고 오류가 일어날지  감이 안올정도 이다.

문제는 공부를 해도 적용을 못하니 개인과제는 이번에도 완성은커녕 반도 제대로 못하고 시간에 쫓겨 제출하게되었다.

주말에 개인적으로 공부하고 만들어보면서 연습해야 할거 같다.

스프링 진짜 어렵구나....

 

 

오늘 공부한 내용

  • Spring 입문주차 1주차 시청 
  •  

어려웠던 내용

1. 전체적인 구조를 이해하려해도 낯선 구조와 단어로 이해가 어렵다.

 

새로 알게된점

1.  Controller를 이용하여 API를 처리하는데 필요한 클래스 갯수를 줄여 보다 코드를 간편하게 만듬

 

 

오늘의 느낀점

Spring 구조가 참 어렵다.

Java로 작성히 중복되는 코드를 줄이고 보다 효율성 높게 처리하기 위해 만든거라지만 하나하나 활용하기에는 아직 이해가 안가는 부분이 너무 많다.

또 기초 강의에서 언급되던 부분이 여기서도 적용되다보니 자바 오버라이딩 부분을 좀 다시 공부해야 겠다.

오늘 공부한 내용

  • Spring 입문주차 1주차 시청 
  • Spring 베이직반 강의 / Collection & Exception

어려웠던 내용

1. Exception에 대해서는 아직 제대로 알지 못함

 

새로 알게된점

1.  Java 의 배열 , 컬렉션에 대한 종류( List, Queue, Set, Map )와 정확한 개념에 대해 알게 되었다.

 

 

오늘의 느낀점

금일 Spring 1주차 초기부분 영상 시청에서 주로 Spring이 왜 필요하며 어떻게 이루어지는 지에 대해 보다보니 지금까지 우리가 편하게 썼던 인터넷이 내가 생각했던것보다 훨씬더 복잡한 존재 였다는것을 느끼게됬다.

베이직반 강의에서는 Spring강의에 앞서 먼저 가장많이 사용되는 Collection, Exception에 대해 강의 해주었는데 세부적으로 예시를 드니 Collection은 이제 확실히 개념이 잡힌거 같은데 Exception은 아직 두루뭉실하게 잡혀서 추후 따로공부해야 겠다.

오늘 공부한 내용

  • 프로그래밍 기초 / 심화반 특강
  • Java의 정석 책 / 객체지향 복습

 

어려웠던 내용

1. Object에 대한 이해, 상속 에대한 이해

 

 

새로 알게된점

1. Object는 객체를 말하며 객체는 의미적으로 뭉쳐있는 역할을 가지는 존재 라는 추상적 개념이라는 것에대해 이해했다.

 

 

오늘의 느낀점

이전에 심화반에서 한 특강을 따로 시청하며 객체지향에 대한 전체적인 개념을 공부했다.

영상을 보면서 객체니, 상속이니, Object이니 단어에 궁금한 의미를 가지는게 많았는데 영어로 따지면 동사, 명사 처럼 명칭을 나타나는 추상적인 개념을 의미하는게 많아서 헷갈렸던 것을 세부적으로 잘 풀어서 설명하다보니 이제야 각 단어가 무엇을 의미하는지 이해가 되었다.

특히 강의에서 객체를 잘 정의해서 정리하면 코드가 편해진다고 했는데 이 의미가 무슨의미인지 확실히 와닿았다.

객체에 익숙해지는게 주 관건이 될거 같다.

또한 스프링 주특기를 시작하는 날이기도 한데 아직 자바도 제대로 이해 하지 못했는데 스프링을 잘할수 있을지 모르겠다

매니저 님이 말씀해주시는 스프링 일정 계획표를 확인하니 먼저 1주동안은 강의시청에 집중하는 시간을 주로 하며 실력에따라 베이직, 스탠다드, 챌린저 형태로 나누었는데 나는 아직 기초가 안잡혔다고 생각해서 베이직 으로 들어갔다.

베이직 실질적 교육은 내일 부터 이다만 잘 할수 있을지 걱정이다.

오늘 공부한 내용

  1. 키오스크 과제 답변확인
  2. 코딩 도장 예제 풀기

 

코딩 도장 예제

  • 10미만의 자연수에서 3과 5의 배수를 구하면 3,5,6,9이다. 이들의 총합은 23이다. 1000미만의 자연수에서 3,5의 배수의 총합을 구하라.

답변

public class Multiplesof3and5 {
    public static void main(String[] args) {
        int sum = 0;
        for ( int i = 1 ; i < 1000 ; i++) {
            if ((i % 3 == 0 || i % 5 == 0))
                sum += i;
        }
        System.out.println(sum);
    }
}

오늘의 느낀점

항상 강의만 보면서 연습하다가 코딩 도장이라는 곳에서 직접 예제문제를 해결하는 방식으로 풀어보았는데 분명히 다 배웠던 것임에도 불구하고 제대로 풀기가 어려웠다.
풀면서 내가 생각했던구조가 오히려 점점 더 어려워지고 이상해지다보니 해결이 안되서 결국 답을 보았는데 답변을 보면서 분명히 이해는 하고 있지만 이 구조식을 머리속으로 만들기까지가 어렵다는 것을 느꼈다.
이거는 수학 문제 풀때처럼 공식만 외운다고 해결될것이 아니라 직접 문제를 풀고 해결하면서 응용방법을 올려야 진짜 실력이 늘거라는것을 확인해싿.
 

 

+ Recent posts