스프링 부트 공부 | 자바 공부 어떻게 해야하나요? 책, 강의, 스터디 방식! 추천 드립니다. 309 개의 새로운 답변이 업데이트되었습니다.

당신은 주제를 찾고 있습니까 “스프링 부트 공부 – 자바 공부 어떻게 해야하나요? 책, 강의, 스터디 방식! 추천 드립니다.“? 다음 카테고리의 웹사이트 you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: https://you.tfvp.org/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 개발바닥 이(가) 작성한 기사에는 조회수 65,310회 및 좋아요 1,521개 개의 좋아요가 있습니다.

스프링 부트 공부 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 자바 공부 어떻게 해야하나요? 책, 강의, 스터디 방식! 추천 드립니다. – 스프링 부트 공부 주제에 대한 세부정보를 참조하세요

생활코딩 자바: https://opentutorials.org/course/3930
(생활코딩에서 웹 강좌는 Node, PHP, 파이썬만 있습니다!)
코드스쿼드 자바: https://www.inflearn.com/course/java-codesquad#

스프링 부트 공부 주제에 대한 자세한 내용은 여기를 참조하세요.

스프링부트(Spring Boot)를 배우기 위해, 스프링(Spring)을 먼저 …

자바의 학습 로드맵 … 2. 제가 생각하는 자바를 공부하는 순서입니다. 주목할 점은 서블릿 다음에 바로 스프링 부트를 공부해도 좋고, 혹은 스프링을 공부 …

+ 여기에 표시

Source: gocoder.tistory.com

Date Published: 1/22/2021

View: 2649

spring 처음 공부하는데 spring boot 로 시작해도 상관없을까요??

전에 구글링 하면서 spring으로 간단한 게시판을 만들어본적이 있는데 그때는 … spring boot 라는 것을 알게되었는데 이 강좌를 보면서 공부를 해도 괜찮을까요??

+ 여기에 더 보기

Source: okky.kr

Date Published: 8/24/2022

View: 7175

[Spring Boot] 스프링 부트 기초(백기선 님의 스프링 부트 개념과 …

스프링 부트 프로젝트 생성 intellij를 실행하여 create new project를 누른다 스크린샷 2020-02-02 오전 … 정적 페이지로 생성하는 방법 저번에 공부한.

+ 더 읽기

Source: velog.io

Date Published: 8/14/2021

View: 6807

스프링부트 백엔드 프로그래밍 (7) – 브런치

지난주에는 자바 예외 처리 및 테스트 코드에 대해서 공부하였고, 캐싱 구현 과제가 있었습니다. 이번 주에는 AOP 에 대해서 공부한 후, 스프링 캐시 …

+ 여기에 자세히 보기

Source: brunch.co.kr

Date Published: 10/25/2022

View: 2829

스프링 공부방법 – 안녕주의 코딩일기 – Tistory

책. [스프링부트와 AWS로 혼자 구현하는 웹 서비스]로 예제 코드들을 따라치며 공부 …

+ 여기에 더 보기

Source: hellozo0.tistory.com

Date Published: 9/28/2022

View: 6395

[JAVA] Spring boot 공부방향 – SK_MOUSE 개발일기

[JAVA] Spring boot 공부방향 ; 1. 완전초보일때 참고할 깃허브 ; 2. 완전 처음일때 강의추천(김영한님 로드맵따라가기) ; 3 나중에 고오급 개발자되면.. < ...

+ 여기에 더 보기

Source: skmouse.tistory.com

Date Published: 6/20/2021

View: 5253

Spring boot 시작하기

만일 자바를 모르는 사람이라면 일단 자바를 공부를 하고 기본적인 컴퓨터공학 지식을 공부 하길 바란다. ( 신입이나 타언어 개발자라면 이런부분은 기본 …

+ 여기에 자세히 보기

Source: ellune.tistory.com

Date Published: 7/2/2021

View: 992

주제와 관련된 이미지 스프링 부트 공부

주제와 관련된 더 많은 사진을 참조하십시오 자바 공부 어떻게 해야하나요? 책, 강의, 스터디 방식! 추천 드립니다.. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

자바 공부 어떻게 해야하나요? 책, 강의, 스터디 방식! 추천 드립니다.
자바 공부 어떻게 해야하나요? 책, 강의, 스터디 방식! 추천 드립니다.

주제에 대한 기사 평가 스프링 부트 공부

  • Author: 개발바닥
  • Views: 조회수 65,310회
  • Likes: 좋아요 1,521개
  • Date Published: 2021. 5. 4.
  • Video Url link: https://www.youtube.com/watch?v=6gNMsjcH3oA

스프링부트(Spring Boot)를 배우기 위해, 스프링(Spring)을 먼저 배워야 할까?

Spring Boot를 위해 , Spring 먼저 알아야 하나?

안녕하세요.

고코더 입니다.

● 1. 스프링 부트를 학습하는 분이 많습니다. 요즘은 실무에서도 스프링보다 스프링 부트 프로젝트가 많아진 걸 느낍니다. 그래서 많은 학습자들이 질문하는 것 중 하나가 바로 “스프링 먼저 학습해야 하나요?”라는 질문입니다. 이 부분에 대한 답을 진행하려고 합니다.

자바의 학습 로드맵

● 2. 제가 생각하는 자바를 공부하는 순서입니다. 주목할 점은 서블릿 다음에 바로 스프링 부트를 공부해도 좋고, 혹은 스프링을 공부하고 다음 스프링부트를 공부하는 것도 괜찮다는 이미지입니다. 미리 제 생각의 결론을 말하면 “스프링 부트 먼저 공부해도 좋다”입니다. 기존의 스프링은 복잡하고 불필요한 설정부터 시작하게 되는 버거움을 제거한 게 스프링 부트입니다. 물론 학습은 무겁게 시작해서 점점 가볍게 가는 것이 좋을 수도 있습니다. 즉 스프링을 공부하고 부트를 공부한다면 효과적이지만, 스프링 부트를 먼저 배우면 좀 더 편리하고 빠르게 배울 수 있다는 있는 장점이 있습니다.

방대한 설정의 늪 스프링

● 3. 스프링은 본래 EJB의 복잡함에 벗어나, POJO 기반의 경량화된 프레임워크였습니다. 하지만 시간이 지나면서 스프링은 점점 많은 곳에서 사용하게 되었고, 필요한 기능들이 늘어나면서 사용할 라이브러리가 극도로 많아졌습니다. 그에 따라 신경 써야 할 사항들은 점점 많아지고, 방대한 설정은 개발자를 지치게 했습니다. (물론 설정도 하나의 학습입니다)

스프링 부트 시작의 편리함

● 4. 스프링 부트는 톰캣, 그리고 제티와 같은 웹서버를 내장하고 있습니다. 복잡한 환경설정을 간소화합니다. 즉 스프링 부트 프로젝트를 생성할 때 일명 스타터를 제공합니다. 필요한 라이브러리를 묶인 패키지들을 의존성만 추가하면 자동으로 부트가 필요한 파일들을 다운로드됩니다. 이렇게 되면 라이브러리의 버전이 상이해서 생기는 오류들을 피할 수 있게 됩니다.

● 5. 그리고 스프링 부트는 기존의 XML로 설정하던 부분들을 어노테이션(annotation)으로 처리합니다. 덕분에 복잡한 XML의 설정을 기록하면서 생기는 오류들을 피할 수 있게 됩니다. 그리고 메이븐(Maven)과 그레이들(Gradle)을 사용하여 자동화된 빌드 도구들을 사용할 수 있게 됩니다. 즉 지겹게 수정하던 Pom.xml을 만들 필요가 없어집니다.

스프링 부트 시작해도 될 거 같습니다.

● 6. 제가 하는 말은 정답은 아닙니다. 복잡한 설정 또한 좋은 학습입니다. 하지만 자동화된 최신의 도구로 본연의 코딩에 빨리 집중할 수 있게 한 것이 스프링 부트라고 생각이 듭니다. 배울게 많은 프로그래머 입장에서는 이러한 속도 또한 중요하다고 생각합니다.

결론은 이렇습니다.

스프링일 먼저 할까? 부트를 먼저 할까라고 고민한다면

스프링 부트 먼저 시작하셔도 좋을 거 같습니다.

[Spring Boot] 스프링 부트 기초(백기선 님의 스프링 부트 개념과 활용 강좌 공부) – air.log

Spring HATEOAS란? Hypermedia As The Engine Of Application State를 구현하기 위해 편리한 기능들을 제공해주는 tool(라이브러리)이다. Hypermedia As The Engine Of Application State는

스프링부트 백엔드 프로그래밍 (7)

“스프링부트 백엔드 프로그래밍”이라는 주제로 약 8주간 글을 작성할 예정입니다. 4주차를 진행 중이며 w전체 일정의 반은 소화하였네요. 제 스터디가 잘못된 방향으로 가지 않도록, 의견 및 조언을 아낌없이 해주시길 부탁드립니다.

지난주에는 자바 예외 처리 및 테스트 코드에 대해서 공부하였고, 캐싱 구현 과제가 있었습니다. 이번 주에는 AOP 에 대해서 공부한 후, 스프링 캐시 추상화에 대해서 공부합니다.

어떻게 설명하면 주니어 개발자들이 쉽게 이해할 수 있을지 많은 고민을 했습니다만, 누군가에게 지식을 전달하는 것은 너무 어려운 일입니다. 처음 시작은 가벼운 마음으로 시작하였습니다만, 글을 쓰고 다시 읽어보니… 너무 이해하기 어려운 내용인 것 같습니다.

튜터링 방법에 대해서 좀 더 고민이 필요할 것 같네요…ㅠㅠ

1주 차 – 스프링부트란 무엇인가?, 간단한 API 서버 만들어보기

1. 스프링부트란 무엇인가?

2. 간단한 API 서버 만들어보기 (커리큘럼 소개)

2주 차 – 스프링 프레임워크 기본 개념 이해하기

3. 스프링 프레임워크 IoC, DI(의존성주입)

4. 스프링부트 AutoConfiguration

3주 차 – Rest API, 테스트 코드 작성하기, 예외 처리하기

5. [이전글] 예외 처리 및 테스트 코드 작성하기

[미정, 나중에 시간되면 작성] 6. Rest API (HTTP 기본 개념)

4주 차 – AOP, 스프링부트 캐시 추상화, Redis 연동하기

7. [지금글] AOP

8. [다음글] 스프링 캐시 추상화, Redis 연동하기

[미정]5주 차 – EventListener, MQ, Pub/Sub

10. EventListener, MQ, Pub/Sub 기본 개념

11. RabbiMQ, KAFKA 사용해보기

6주차 – 보안(인증)

[미정] 7주 차 – 병렬, 비동기 프로그래밍

[미정] 8주차 – Spring Cloud

[미정] JPA, Spring Data, Spring Session 등

7. AOP

7장에서는, AOP에 대해서 상세하게 설명을 할 예정이었습니다만… 제가 AOP를 제대로 설명할 자신이 없네요.

7.1 AOP 란?

스프링 레퍼런스에서 참고하였습니다.

Aspect-oriented Programming (AOP) complements Object-oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. Aspects enable the modularization of concerns (such as transaction management) that cut across multiple types and objects. (Such concerns are often termed “crosscutting” concerns in AOP literature.)

자세한 설명은 생략합니다. 링크를 참고하세요.

https://jojoldu.tistory.com/71

https://www.baeldung.com/spring-aop

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop

7.2 AOP, 그림으로 이해하기

시간 관계상 생략…

7.3 AOP, 코드로 이해하기

스터디에서 과제를 수행하면서, 오픈 API를 연동한 검색 서비스를 구현하고 있습니다. 검색 요청 시 외부 API 서버를 호출해야 하기 때문에, 전체 응답이 빠르지는 않습니다. 그래서, 우리는 비즈니스 로직의 수행 시간을 로그에 남기고 싶습니다. 아래와 같이 3초의 지연시간이 발생하는 메서드가 있다고 가정해봅니다.

메서드 내부의 수행 시간을 확인하기 위해서는, 아래 샘플 코드처럼 비즈니스 로직이 수행하기 직전, 직후 의 시간 차이를 계산해서 수행 시간을 로그에 남길 수 있습니다.

하지만, 이 방법에는 치명적인 단점이 있습니다. 수행 시간 확인을 하고 싶은 메서드가 있다면, 해당 모든 메서드에 시간을 계산하는 로직이 추가되어야 합니다.

모든 메서드에 수행 시간 계산하는 코드를 추가해야 한다…???…

좋은 방법이 아닌 것 같습니다.

스프링 AOP를 구현해보겠습니다. 먼저 의존성을 추가합니다.

@PerformanceTimeRecord라는 어노테이션을 정의해줍니다.

메서드 상단에 어노테이션을 선언해줍니다.

가장 중요한 코딩은, 실제로 수행 시간을 로그에 남길 수 있도록 AOP 구문을 작성해야 합니다. 가장 중요한 구문은 바로 joinPoint.proceed()입니다. 실제 메서드의 내부 로직을 수행합니다. 그리고, proceed() 결과를 반드시 반환해줘야 합니다. return proceed;

메서드를 실행하면, 아래와 같이 로그가 기록됩니다.

이 글에서는, AOP에 대해서 아주 극히 일부에 대해서만 설명하였습니다. 각자 공부하시길 바랄게요.

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-introduction-defn

7.4 AOP, 실제 구현해보기

샘플 코드는 아래 링크를 확인해주세요. 이번 샘플 코드는 자세히 안 보셔도 됩니다.

https://github.com/sieunkr/spring-study-group/tree/master/4-0

지난주 과제는 영화 검색 서비스에 캐싱 기능을 구현하는 조금 어려운 과제였습니다. 해당 과제에 대해서 대부분의 주니어 개발자들이 영화 검색 메서드 내부에 캐싱 기능을 적용하였습니다.

또는, 응용 서비스 결과를 캐싱 처리하고 싶다면, 서비스를 호출하는 컨트롤러 레이어에서 아래와 같이 구현하면 될 것입니다.

Controller, Service 등 각자 코딩 스타일에 따라서 선택해서 캐싱 로직을 잘 구현하였습니다. 하지만, 영화 외에 쇼핑, 블로그, 뉴스 등 모든 기능에 캐싱 기능을 적용하고 싶다면 어떻게 하면 될까요? 모든 검색 서비스에 캐싱 기능을 전부 적용해줘야 할까요?

AOP 개념을 적용해서, 캐싱 기능을 구현해보겠습니다. 지금부터의 코드는… 이해가 되지 않는다면, 따라 하지 않으셔도 됩니다. 사실, 스프링에서는 이미 캐시 추상화를 제공하고 있고, 다음 시간에 자세히 설명할 예정입니다. 해당 코드는 AOP, 캐싱을 주니어 개발자에게 이해시키기 위해서 임시로 작성한 코드입니다. 자세한 코드가 궁금하시다면 제 github을 확인하시면 됩니다만, 굳이 안 봐도 됩니다. 스프링의 캐시 추상화를 사용하시면 됩니다.

7.4.1 캐시 데이터를 저장하는 자료구조 정의

CurrentMapCustomCache라는 캐시 저장소 역할을 하는 클래스를 정의합니다. 실제 캐시 저장소인 store 필드는 ConcurrentMap의 구현체인 ConcurrentHashMap을 사용합니다.

1. 캐시 데이터를 저장하는 자료구조는 ConcurrentMap의 구현체입니다. 필자의 샘플 코드에서는 ConcurrentHashMap을 사용하였습니다. key 에는 캐시의 키가 저장되며, value 에는 캐시 데이터가 저장됩니다.

2. 캐시 데이터를 Key(키)를 사용해서 찾습니다. 없으면 Optional.empty를 반한 합니다.

3. 신규 캐시 데이터를 저장합니다.

캐시 데이터는 아래와 같이 저장됩니다.

예)

key : 반지의 제왕, value: 에는 ArrayList 데이터가 저장되어있습니다.

위와 같은 캐시 데이터를 용도에 따라서 여러 개의 캐시를 생성 및 관리할 수 있어야 합니다. 전체 캐시 데이터를 관리하는 역할의 CacheManager를 정의합니다.

필자의 샘플 코드에서의, CacheManager는 캐시를 찾아서 반환해주는 역할 정도만 수행합니다. (예를 들어서, 영화 검색에 대한 캐시를 찾아서 반환해줍니다.) 자세한 구현 소스는 생략합니다.

CacheManager에서는 전체 캐시 데이터를 cacheMap 필드에 저장해서 관리합니다. 아래와 같이 모든 캐시 데이터를 저장하고 있습니다.

7.4.2 AOP 캐시 추상화 직접 구현해보기

스프링에서는 @Cacheable이라는 캐시 추상화를 이미 제공합니다. 이 글은, 스터디를 위한 샘플 코드이며, 실무에서 필자의 샘플 코드처럼 사용하지 않습니다.

어노테이션을 선언해줍니다.

캐싱 기능을 적용할 메서드에 어노테이션을 선언해줍니다.

– 영화 검색 시 캐싱 기능이 합니다.

– 추천 영화 데이터 제공 시에도 캐싱 기능을 적용합니다.

– 영화 검색 이외에 어떤 기능에도 편하게 어노테이션만 선언해주면 됩니다.

@LookAsideCaching 어노테이션이 붙은 메서드에는, 캐싱 기능이 동작할 것입니다. key에 해당하는 캐시 데이터가 이미 존재한다면, 메서드 내부 로직을 수행하지 않습니다. 왜냐면, 캐시 데이터가 이미 존재하고 있어서, 해당 데이터를 그대로 사용하면 되기 때문입니다. 캐시 데이터가 있는데 굳이 비즈니스 로직을 수행할 필요가 없습니다. 반면에, 캐시 데이터가 없는 경우에는, 캐시 데이터가 없기 때문에 당연히 메서드 내부 로직이 수행되어야 합니다. 즉, 신규 데이터를 생성해서 사용한 후, 나중에 또 사용할 수 있도록 캐시 데이터를 저장해놔야 합니다.

AOP 코드를 작성해보겠습니다.

CachingAspectProvider이라는 클래스에 구현합니다.

코드는, 중요하지 않습니다. 개념만 이해하세요.

1) 캐시 데이터가 있다면, 존재하는 캐시 데이터를 반환합니다. 즉, @LookAsideCaching 어노테이션이 선언된 메서드 내부를 수행하지 않습니다.

2) 캐시 데이터가 없다면, joinPoint.proceed()를 실행해서, 메서드 내부를 실행합니다. Repository를 사용해서 오픈 API 데이터를 조회합니다. 그리고, 조회한 데이터를 putInCache() 메서드를 호출해서 캐시 저장소에 저장합니다.

코드와 글로 설명하기에는 너무 지루한 내용이네요. 그림으로 설명해보겠습니다.

캐시 데이터가 존재한다면, joinPoint.proceed()가 실행하지 않습니다. 즉, search 메서드의 내부가 실행이 되지 않습니다.

반면에, 캐시 데이터가 존재하지 않는다면 어떻게 될까요? 아래 그림과 같이, 메서드 내부 비즈니스 로직이 실행됩니다.

휴… 자세한 내용은, 스터디 시간에 말로 설명하겠습니다……

7.5 샘플 코드에서 설명하고 싶었던 개념

7.5.1 AOP

관점지향 프로그래밍이라고 부르는 AOP는, 기존의 객체지향 프로그래밍을 보완하기 위해서 사용합니다. 우리가 스터디 중에 진행하는 과제의 핵심 기능은 무엇인가요? 바로 오픈 API를 연동해서 검색 데이터를 제공하는 서비스입니다. 하지만, 캐싱, 로그, 보안, 트랜잭션 같은 기능은 핵심 기능인 검색 서비스와는 개별적인 횡단 관심의 내용들입니다. 이런, 횡단 관심의 기능들은 AOP 개념을 사용해서 적용하면, 중복되는 코드를 효율적으로 관리할 수 있고, 생산성을 높일 수 있습니다.

역시, 자세한 설명은… 스터디 시간에 하기로…

7.5.2 Cache Pattern

캐싱 전략은 딱히 정답이 없다고 생각합니다. 회사마다 다르고, 상황에 따라서 적절하게 구축해야 합니다. 이것이 항상 정답이다!라는 것은 없습니다. 첫 번째 전략으로는 Inline Cache pattern이라는 전략이 있습니다. 데이터를 캐시 스토리지에 미리 저장하고 필요할 때마다 조회해서 사용하는 방식입니다.

위와 같이 모든 데이터를 캐시에 저장하는 것이 비효율적인 상황이라면, 대안으로는 Cache Aside Pattern을 고려해보는 것도 좋습니다.

처음 사용자가 요청했을 때는 캐시 스토리지에는 아무 데이터도 없는 상황입니다.

1. 애플리케이션은 먼저 캐시 저장소에 데이터가 있는지 조회한다. 하지만 데이터가 없다.

2. 애플리케이션은 Contents DB에서 데이터를 조회하고 사용자에게 제공한다.

3. 애플리케이션은 Contents DB에서 가져왔던 데이터를 캐시 저장소에 저장한다.

다음 사용자가 요청했을 때는 이미 캐시 저장소에 데이터가 있는 상황입니다.

1. 애플리케이션은 먼저 캐시 저장소에 데이터가 있는지 조회한다. 캐시 저장소에 저장되어있는 데이터를 제공한다.

이 글의 샘플 코드는, Cache Aside Pattern에 해당합니다. Aside Pattern에 대해서는, 아래 링크를 참고하길 바랍니다.

https://docs.microsoft.com/ko-kr/azure/architecture/patterns/cache-aside

7.5.3 PSA (Portable Service Abstraction)

샘플 코드에서는 CustomCacheManager라는 인터페이스를 정의하였고, 해당 구현체인 memoryCustomCacheManager를 사용해서, 메모리 기반의 캐싱을 구현하였습니다.

만약에, 저장소를 메모리가 아니라… Redis에 저장하도록 변경하고 싶다면 어떻게 하면 될까요? CustomCacheManager의 구현체인 RedisCustomCacheManager를 정의해줍니다.

그리고, CustomCacheManager를 의존하는 곳에서, 사용하고 싶은 구현체만 변경해주면 됩니다.

하아… 글로 설명하기 어려우니, 그림으로 설명하겠습니다.

AspectProvider에서는 CustomCacheManager 인터페이스를 주입받습니다. 인터페이스로 정의하였기 대문에, 실제 구현체에 대한 주입의 변경은 매우 심플하게 구현할 수 있습니다. 이 경우에, 메모리 캐싱에서 레디스 캐싱으로 변경하는 경우, AspectProvider 에는 크게 영향을 받지 않습니다.

또한, 영화 검색 서비스에 @LookAsideCaching이라는 어노테이션을 선언함으로써 캐싱이 동작하도록 구현하였는데요. 응용 서비스 입장에서는, 캐싱이 실제로 어떻게 동작하는지 전혀 관여하지 않습니다. 어떤 구현체를 사용했는지, 레디스를 사용했는지, 메모리를 사용했는지.. 전혀 알지 못합니다.

지난주 과제를 보니, 대부분의 주니어 개발자분들께서는, 영화 서비스에 대해서만 캐싱 로직을 구현하였고, ConcurrentMap에 의존하게 과제를 작성하셨습니다. 만약에, ConcurrentMap 기반의 캐싱을, 레디스를 연동하는 방식으로 변경하게 되는 경우에, 영화 검색 서비스 소스 코드에 얼마나 영향을 끼치나요? 영향을 많이 끼칠수록, 특정 구현체에 강하게 의존하고 있다는 증거입니다.. 구현체에 강하게 의존하지 않고, 느슨한 연결을 할 수 있도록 애플리케이션을 개선해보면 좋을 것 같습니다.

7.6 마무리

7장에서의 샘플 소스는, AOP 개념을 사용해서, 메모리 기반의 캐싱을 구현하였습니다. 사실, 스프링에서는 캐시 추상화라는 좋은 기능을 제공합니다. 아래와 같이, @Cacheable라는 어노테이션을 스프링 프레임워크에서 기본으로 제공합니다. 아래 샘플 코드와 같이 메서드 상단에 선언해주면, 캐싱이 동작할 것입니다.

스프링의 캐시 추상화를 사용하고 싶다면 몇 가지 설정이 더 필요합니다. 자세한 내용은, 8장에서 알아보겠습니다.

스프링 공부방법

안녕하세요 안녕주입니다..! 방학이 되어 진짜 스프링 공부를 제대로 시작해보려고 합니다.!

과거에 썼던 글이 지금도 알아보기 힘들어서 어떤 강의 & 어떤 책으로 공부 했고 하고싶은지 등등을 다시 정리 하겠습니다!

[스프링부트와 AWS로 혼자 구현하는 웹 서비스]로 예제 코드들을 따라치며 공부했는데,

어렵지 않고 처음에 공부하기 쉽다는 생각을 했습니다!

[자바 ORM 표준 JPA 프로그래밍]은 보진 못했지만 유명하고… 김영한 님이 워낙 유명하시기에

기회가 될때 구매해서 공부해볼 예정입니다.

예… 필독서죠,,,? 버전이 너무 예전꺼라 이해가 될지 모르겠지만, 모르는 개념들을 한번씩 찾아볼때 좋다고 합니다!

<아래서 부터는 개발할때 도움이 될 지식을 주는 책들>

서버 개발자가 될 거라면 꼭 읽어보고 공부해야할.. 클린코드

객체지향 언어를 사용하다보니,,, 객체지향의 사실과 오해 책은..필독서 입니다..

디자인패턴! 공부 책

인강

초보라면 우선 인프런의 로드맵대로 강의를 듣는 것을 추천드립니다.! 처음에 강의부터 들었을 때 이해하기 어려울 수 있어서, 책으로 먼저 가볍게 공부를 한 다음에, 강의를 2회독 정도를 하면 2회차때 이제 아….. 대강 알아 듣겠다..! 하겠더라고요…..

어렵더라도.. 오래 걸리더라도 포기하지 않고 공부하는 게 중요하다는것을 깨달았던 것 같습니다!

저도 작년에 강의 듣다가 하나도 모르겠어서 포기하고 다른 공부를 하다가 일년이 지난 지금 이제서야 조금 이해가 되기 시작하더라고요

나만 모르겠는게 아니라 모두가 어려워하는 것이니까 포기하지 않고 꾸준하게 천천히 공부해봅시다!!

그리고 예전에 구글링 하면서 백엔드 공부를 위해 꼭 알아야하는 개념들 기록해둔것

백엔드: 자바 기초 배우기 객체 지향 프로그래밍, 파일 IO, 멀티 스레드의 개념을 꼭 배우시길 바랍니다. 유닛 테스트를 꼭 잘 배우시구요. 로그 라이브러리 사용법도 알아야 합니다. 자료 구조 중 list, map의 용도와 사용법, 그리고 하위 클래스들의 사용법은 필수입니다. 가능하다면 TDD를 해 보시고, 좋은지 나쁜지는 스스로 판단하시기 바랍니다. 이클립스(혹은 inteliJ)와 같은 IDE 사용법, 그리고 maven과 gradle의 기초에 대해서도 배워야 합니다.

프론트엔드 분야: Javascript, HTML, CSS, JQuery, Angular.JS, React.JS 등의 지식을 습득합니다. box model의 이해, 프론트 엔드 개발 도구들, 기타 등

데이터베이스 기초: 관계형 데이터베이스, NoSQL(mongdb), 웹 서버와 데이터베이스의 연동에 대해 공부합니다.

VirtualBox또는 AWS, Heroku 등을 이용한 내 서버 마련하기, 그리고 추가적으로 클라우스 서비스에 대해서도 가볍게 공부하시길 권합니다.

네트워크의 기초: tcp/ip, 소켓의원리, http의 구조, 웹 서버와 웹 브라우저의 동작 원리 등에 대해서도 아시는 게 좋습니다.

REST API: 웹 페이지와 웹 서비스와의 차이점, REST API란 무엇인가?

백엔드 개발자 초보 탈출!

초보를 탈출하고 나서 여러분들에게 도움이 될 만한 것들을 나열해 보았습니다.

백엔드 심도있게 공부해보기 (아무래도 스프링이 좋은 것 같아요. 다른 것도 괜찮습니다.)

디자인 패턴 (head first desgin pattern이 좋다고 합니다.)

effective Java 읽어 보기

다른 소스 많이 읽고 많이 짜 보기 (개인적으로 이희승님의 netty를 공부하는 걸 추천합니다.)

reflection, generic에 대해 조금 더 깊게 배워야 할 것 같습니다.

virtual machine의 동작 원리, 가비지 콜렉션의 원리, bytecode의 이해

성능 프로파일링 도구

로그 수집 툴

오지는 컴퓨터 공부님의 페이지에서 참고용으로 따왔습니다. 문제시 삭제하겠습니다.

<자바 개발자 로드맵>

<백엔드 개발자 로드맵>

https://skmouse.tistory.com/entry/2021-JAVA-백엔드-개발자-로드맵

[JAVA] Spring boot 공부방향

[무료] 스프링 입문 – 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 – 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

Spring boot 시작하기

반응형

국내에선 자바개발자 = 스프링개발자 라고 할정도로 공식화 되있다. 나도 자바개발자 이며 스프링 개발자 이고 저말에 딱히 부인 하지 않는다.

회사를 다니면서 신입들을 만날때도 있고 가끔 강의를 나가면 자바개발자가 되려면 어떻게 해야할지 등 이젠 나도 나이가 있다보니 교육(?) 을 해주거나 약간의 주제넘은 조언을 해줘야 하는 경우가 점점 잦아 지고 있다. 그럴때마다 머리속을 검색해서 순서가 뒤죽박죽인 내용들을 공유 해주다보니 항상 후회가 남곤한다. 좀 정리해서 전달 해줄수 있다면 좋았을거 같은데 하고 말이다… 그래서 이렇게 글을 하나 작성해 두고 줄기차게 우려먹으려 한다. 신입들 그리고 대학생들 혹은 자바개발자가 되고 싶은 비전공자들을 위한 간략하고 알찬(?) 입문 글을 한번 작성해보겠다 !

첫걸음.

스프링을 이해하기 위해선 일단 언어를 알아야 한다. java 언어에 대한 기본 이해와 사용 노하우가 기본 바탕이 되있어야 한다. 보통 학원에서는 어떻게 가르쳐서 내보내는지 모르겠지만 내가 쓰고자하는 도구를 이용하는 수단에 대한 기본이 없다면 제대로 도구를 사용하지 못한다. 만일 자바를 모르는 사람이라면 일단 자바를 공부를 하고 기본적인 컴퓨터공학 지식을 공부 하길 바란다. ( 신입이나 타언어 개발자라면 이런부분은 기본 숙지 되있으니 이부분은 생략해도 좋다고 본다. )

자바에서 어떤 부분을 봐야 하냐고 한다면 솔직하기는 책한권을 다 읽고 시작하라고 싶다. 그래도 굳이 우선순위를 개인적으로 뽑자면…

쓰레드, 메모리관리, collection , 상속, 인터페이스 , http 통신 , jdbc 최소 이런 개념들은 알아야 하며, 기본적은 문법들은 너무 너무 기초적으로 알아야 하는거라 생략 했다.

쓰레드라는 개념은 자바에서 나온것이라기보단 컴퓨터 공학적인 기초 개념에 가깝다. 이해가 안된다면 간단하게 쓰레드 하나는 하나의 작업을 처리하는 단위라고 생각하면 좋을거 같다.

실제 컴퓨터에서 구동하는 운영체제는 저런구조라고 생각하면된다. 동기식 비동기식 이런것들이 당장 이해가 안간다면 일단 동기식부터 이해하는게 좋다고 본다. 프로세서에서는 여러가지의 쓰레드를 생성할수 있고 쓰레드에서는 한가지일만 한다. 그렇다면 여러일을 동시에 하고 싶다면? 쓰레드를 여러개를 만들면 된다!

자바를 사용한다면 생각보다는 메모리에서 자유롭다. 다른언어들중에는 특히 오래된 언어들은 메모리관리에 헛점이 잘생기는편이다 특히 C 에선 메모리관리를 직접 개발자가 하기때문에 실수의 종족인 인간은 완벽하게 관리해내지 못한다. 자바는 가비지 콜렉터 을 사용하며, 역할은 단순하다 오래 안쓰는 메모리는 치워버리자! 자바 개발자라면 가비지 콜렉터를 절대로 잊어선 안되고 항상 감사한 마음으로 !

collection 은 굉장히 많이 사용하게 되며 map 또한 줄기차기 지겹도록 개발하면서 용하게 될것이다. 실제로 위에 예시보다 많은 종류들이 더있기 때문에 꼭 공부하면 좋을거 같다.

상속과 인터페이스는 자바 언어에 더 가까운 이야기들이기 때문에 생략하지만 꼭 알아야 만한다. 이건 객체지향 언어를 사용는 개발자라면 기초 지식이라고 본다!

http 통신은 간단하다 웹브라우저와 웹서버 간의 통신 규약 이라고 생각하면 된다. 더 단순하게 이야기하면 서로 전화 통화를 할건데 이걸 규칙을 정해서 할거고 그 규칙이 http 라는것이라고 생각하면 된다. 예전엔 단순 웹페이지 용이였다면 지금은 서버에서 웹브라우저 뿐만 아니라 여러 종류의 클라이언트들에게 데이터를 전달할때 사용된다. 극단적으로는 http 프로토콜만 잘 알고 있어도 ! 고급 신입 스럽게 보일수 있다 ! 현장에선 보통 http 를 거의 대부분 쓰고 있기 때문이다.

jdbc 라는건 자바책에서 꼭! 확인할수 있는 부분이다. 서버 개발을 하게 되면 데이터베이스없이는 전혀 아무것도 할수 없다. 데이터를 어디다 저장하고 어디서 불러올것인가를 생각하면 현재 대안은 데이터베이스가 유일하다. RDBMS, NoSql 같이 분류가 되어 사용되고 있고 , 데이터베이스라고 할수는 그렇지만 redis , kafka 같은 메세지 큐같은것들도 알아 두면 좋다.

두번째 걸음

스프링 시작하기라고 해놓고 전혀 스프링이야기는 하나도 없이 작성한거 같다. 하지만 다시 강조하지만 자바 책 한권정도는 정주행하고 이해하고 시작해야 스프링을 제대로 사용할수 있다.

스프링 프레임워크이란 ?

자바플랫폼을 위한 오픈소스 어플리케이션 프레임워크라고 할수 있다. 그럼 프레임워크란 무엇인가 ! 개인적으로는 개발을 할때 필요한 오픈소스 혹은 툴들이 모여있는 거대한 도구라고 생각한다.

실제로 프레임워크를 쓰면 개발시 굉장히 시간이 절약이 된다. 그리고 부가적인 효과지만 같은 프레임워크를 사용하는 개발자 끼리는 코드 공유시 굉장히 분석이 쉬워진다. 구조가 같고 사용방식이 비슷하기 때문이다. 기업 입장에선 굉장히 메리트가 있다고 생각한다.

그럼 프레임워크로써 스프링의 특징은 무엇인가 ?

자바객체의 라이프 사이클을 관리 해준다. 그리고 스프링으로 부터 필요한 객체들을 가져올수 있다. 말이 어렵지만 단순하게 이야기하면 객체들의 생성과 소멸에 개발자가 심각하게 고려하지 않아도 되고 내가 필요한 것들을 불러오기 위한 수고로움을 보조해주는것이라고 생각하면된다.

POJO

스프링하면 많이 나오는 단어거 POJO 인데 쉽게 말하면 일반적인 자바 개발시 인터페이스라던가 상속을 사용해서 기능을 구현하는 방식을 자주 사용하게 되는데 이럴 경우 각 클래스간의 의존도가 생기게 된다. 의존도 때문에 코드가 수정되어야 할경우 여러부분에 수정해야하는 부분이 많이지는데 , extends 와 implements 를 생략하고 어노테이션을 사용함으로써 의존도를 낮출수 있게 된다. pojo 예제를 찾아보면 일반적으로 getter/setter 에 대한 내용이 많이 나온다 . 찾아보고 참고하면 좋을거 같다.

DI

스프링을 이야기하면서 또 많이 나오는 영역은 DI 이다. Dependency Injection 이라고 하며 우리말로는 의존성 주입이라고 해석 할수 있다. 찾아보면 어렵게 많이들 이야기 하는데 아래 예시를 보면 간단하게 알수 있다.

[ 설정 예시 ] @Configuration public class WebConfig { @Bean(name = “beanA”) public BeanA beanA { return new BeanA(); } @Bean(name = “beanB”) public BeanB beanB(BeanA beanA) { BeanB beanB = new BeanB(); beanB.setBeanA(beanA); return beanB; } } [사용 예시] @RestController public class DiController { @Autowired private BeanA beanA; @Autowired private BeanB beanB; }

대부분 DI 예시를 찾아보면 Spring framework 기준으로 xml 로 bean 을 선언하고 그것을 사용하는것을 많이 예제로 사용한다. 하지만 spring boot 를 많이 사용하는 추세이고 xml 로 이해하기에는 xml 이 너무 복잡하다. 그래서 spring boot 는 기본적으로 @Bean 어노테이션 사용을 기본으로 하고 있다. 위 내용을 간단히 설명하면 설정하는 java confing 클래스에서 저런식으로 Bean 으로 설정을 해주고 의존성을 부여해주면 다른곳에서 @Autuwired 를 하여 간단하게 클래스를 불러서 사용할수 있다. 기본적으로 스프링 부트는 실행이 시작할때 @Bean 으로 선언된 클래스들 로드 하게 되기 때문에 별다른 클래서 생성이 필요 없이 사용이 가능하다. 저걸 자바 기본 문법상으로 표현하면 아래와 같다.

[ 사용 예시 ] public class DiController { @AutoWired private BeanA beanA; @AutoWired private BeanB beanB; public DiController() { BeanA tempBeanA = new BeanA(); BeanB tempBeanB = new BeanB(); } }

AOP

bean 자체가 lifeCycle 을 가지고 있기 때문에 생성부터 소멸까지 확인이 가능하다. 일반적은 클래스 선언을 이용한 방식보다 좀더 관점에 따른 컨트롤이 가능하다. 다른 말로는 관점지향 프로그래밍 혹은 AOP 라고 하는데 @Aspect 어노테이션을 통해서 한클래스에 대해서 호출전 (@Before) , 호출 이후 (@After ) , 정상적으로 반환한 이후 (@AfterReturning) , 예외발생이후(@AfterThrowing) , 메소드 실행 전후 (@Around) 등 타겟이 되는 메서드의 Aspect 실행 시점을 지정할수가 있다.

이런것을 왜 쓰는지 의아 할수 있지만 대표적인 경우가 로깅 하거나 디버깅할때 아주 유용하다. 어떤 요청이 오는지 미리 기록하거나 처리 다한이후 후처리 작업이 필요한경우 AOP 를 통해 유연하게 대처가 가능하다. 그렇기 때문에 필수적으로 스프링을 사용하는 사람이라면 개념을 이해 하고 있어야 한다.

POJO , DI , AOP 등을 처음에는 spring framework 에 선언되있는 xml 을 통해서 공부 했었고 1년동안은 제대로 이해를 못하고 사용 했던것 같다. 일단 xml 로 되있는것들은 가독성이 너무 않좋고 spring framework 자체가 설정이 너무 복잡한것도 한몫을 한다. 지금은 spring boot 라는 좋은 대안과 좋은 교재가 생겼고 spring boot 를 이용해서 만들어진 프로젝트들의 java config 를 잘 분석하고 공부하면 충분히 쉽게 이해할 여지가 많이 생겼다고 생각한다.

잊지 않기 위해 블로그에 기록을 기본적인것들도 하나 하나 정리를 열심히 해야겠다.

반응형

키워드에 대한 정보 스프링 부트 공부

다음은 Bing에서 스프링 부트 공부 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 자바 공부 어떻게 해야하나요? 책, 강의, 스터디 방식! 추천 드립니다.

  • 개발자
  • 자바

자바 #공부 #어떻게 #해야하나요? #책, #강의, #스터디 #방식! #추천 #드립니다.


YouTube에서 스프링 부트 공부 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 자바 공부 어떻게 해야하나요? 책, 강의, 스터디 방식! 추천 드립니다. | 스프링 부트 공부, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment