이야기를 나눠요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
혹시 아직 스프링 강의를 들을 때가 아닌걸까요?
자바입문~자바 중급 1차 강의까지 듣고 프레임워크,제네릭은 스스로 공부한 다음코테 문제들 풀어보면서 자바에 조금 익숙해진 다음 영한님 스프링 강의 막 듣기 시작했습니다.근데 코드 분석의 거의 안되더라구요. 분석이 안되니 들었던 내용도 까먹은 것 같은 느낌이 들고혹시 먼저 들어야 할 강의를 놓친것 아닐까 아직 스프링 강의를 들을때가 아닌가 이런 생각이 들더라구요jdbcTemplate.query("select * from member where id = ?", memberRowMapper());같은 곳에서는 query가 뭐지?"select * from member where id = ?"은 뭐지 물음표가 왜 나온거지?memberRowMapper는 왜 만들어진거지?public Member save(Member member) { SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate); jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id"); Map<String, Object> parameters = new HashMap<>(); parameters.put("name", member.getName()); Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters)); member.setId(key.longValue()); return member; }jdbcInsert는 갑자기 뭐지?등등 이런 코드에 대한 분석이 안되니까 먼저 들어야할 강의가 있는 데 안들어서 코드에 대한 분석이 안되는건지 혹시 뒤에 기본편 강의에서 자세히 설명해주시니 그냥 이런게 있구나 듣고 뒤에 강의로 넘어가는 게 맞을지 막 생각이 뒤죽박죽해지네요. 혹시 방향성을 잡아주실 수 있을까요?
-
스프링 핵심 원리 - 기본편
이 구간에서 발견 할 수 있었던것 정리해봤어요! 혹시 어떤 것들이 있으셨나요?
[ 깨달음 ] - 역할과 구현의 효과를 체감=> 역할: BeanDefinition 정보 생성==> 구현: 무엇을 가지고 BeanDefinition 생성- BeanDefinition을 보면 Bean 생성 시 무엇을 정의 할 수 있는지 알 수 있다=> Scope, lazyInit 등등- factory method를 쓰는 annotation config는=> 빈 정보에 factoryBeanName = config name, factoryMethodName = 생성 method 이름 이 붙음 [ 생각과 느낌 ] - 코드 작성에도 교양이 있으면 낭만이 있다- 직접 BeanDefinition 을 만들다니 우와
-
스프링 핵심 원리 - 기본편
노트 정리해보았습니다! 혹시 필요하신 분 있으실까요?
[ 배움 ]- ApplicationContext는 BeanFactory의 자식이다=> ApplicationContext는 부가 기능 제공 - ApplicationContext 부가 기능=> 여러 인터페이스의 묶음==> 메시지 소스:===> 메시지의 국제화 등==> 환경 변수: ===> 환경 변수 사용 등==> 이벤트:===> 이벤트 발행 등==> 리소스:===> 리소스 파일 열기 등 - 스프링 컨테이너=> 실제 클래스가 아니라 개념이다 [ 생각과 느낌 ]- 인터페이스가 많이 분리된 경우를 많이 봤는데=> 그 이유가 역할의 분리에서 나온 것이었구나 - 환경 변수 어떤 기준으로 쓸까?=> 환경에 따라 값을 다르게 하기 위해 사용==> 즉, 이 값을 환경 변수로 둬야 할까의 기준은 어떤 환경에 쓰는가에 달라지냐 여부===> 예: 환경 별 달라지는 사용 데이터베이스 - 여러 환경을 두려면=> 테스트 등 을 위해 따로 DB 등 서버를 띄워야 하고==> 그만큼 많은 하드웨어 리소스도 많이 필요하겠구나
-
스프링 핵심 원리 - 기본편
노트 정리 해보았어요! 혹시 어떤 내용이 기억에 남으시나요?
[배움]- 부모 타입으로 조회=> 자식 타입들도 끌려 온다- 모든 자바 객체의 최고 부모=> Object [생각과 느낌]- 코드 내에서도 역활과 구현을 확실히 나타내 주도록 하자=> (부모 class) return (구체 class)
-
스프링 핵심 원리 - 기본편
정리해보았습니다! 이상할까요?
[생각과 느낌]- Bean에게는 Name이 있다- Bean에게는 Type이 있다- 같은 Type의 Bean은 Name으로 구분한다
-
스프링 핵심 원리 - 기본편
노트 정리 해보았습니다. 가장 중요한 핵심은 어디일까요?
[ 배움 ] - getClass() 하면 classpath가 출력됨- isInstanceOf 로 구체 객체 확인- 타입으로만 조회 가능- assertThrows 로 예외가 던져지는지 테스트=> 주로 실패에 대한 테스트 시 사용 [ 깨달음 ] - 테스트는 실패 하였을 때 에 대한 case도 필요하다=> 예: 인증 실패에 대한 response는 어떻게 오는지 확인 [ 생각과 느낌 ] - java는 다양한 Exception 에 대한 정의를 해두는 방식으로 현재 어떤 오류가 나는지 사용자에게 알려주고 있다.=> Exception 명을 정 할 때 해당 오류에 대한 소개가 나와야 한다.
-
견고한 결제 시스템 구축
강의 잘보고있습니다 !
안녕하세요 !강의 잘보고있습니다.결제 관련된 강의가 거의 없던데 참고하는데 도움이 많이됩니다.조금 빠른감이 있고 아직 제실력으로는 이해하기 어려운부분도 많지만 끝까지 완강해보려고합니다.궁금한점은 이 결제 웹서비스는 web 패키지를 따로 만들어서 분류하던데요 혹시 mobile 과는 어떤 차이가 있는지 궁금합니다.
-
스프링 핵심 원리 - 기본편
노트 정리해보았어요! 추가 할 내용 있을까요?
[Spring 적용]- @Bean=> method에 적어줌==> 컨테이너에 등록됨- ApplicatonContext 생성=> 컨테이너 생성==> new AnnotationConfig...(AppConfig.class);- 컨테이너 통해서 찾아옴=> bean을 가져옴==> name: method 이름==> type: 반환 type- 실행 시 등록 됨=> @Bean 해둔 것 singleton instance 생성- 스프링의 어마어마한 장점:=> 컨테이너가 관리해서 어마어마 해진다 [생각 및 느낌]- 좋은 개발자는 당연한 것에 의구심을 품는 개발자이다- 스프링의 개발 시초는 DIP 와 OCP를 지키기 위해서 생긴거구나
-
스프링 핵심 원리 - 기본편
노트 정리해보았어요! 추가 할 내용 있을까요?
[스프링 컨테이너 생성]- 컨테이너 생성 과정=> ApplicationContext는 인터페이스 이다==> AnnotationConfig (annotation 기반)- 요새 XML 잘 안씀=> Boot 에서 java config 편함- AppConfig=> 우리가 작성한 AppConfig가 컨테이너에 대한 명세 였다- 주의: 빈 이름은 항상 다른 이름을 부여 해야 한다=> 실무에서는 무조건 단순하고 명확하게 개발 해야 한다- 스프링 빈 의존관계 설정 - 준비=> MemberServiceImpl은 MemberRepository를 의존함==> 이를 생성자로 주입 받음 (의존관계 주입 DI)===> 스프링에서 알아서 필요한 것들을 순차적으로 생성해 넣어준다- 스프링 빈 의존관계 설정 - 완료=> 의존관계 주입도 같이 처리 된다==> MemoryMemberRepository는 bean으로 동록 하지 않았지만 주입에는 사용 되었다[생각과 느낌]재미있다
-
스프링 핵심 원리 - 기본편
노트 정리해보았어요. 어떤가요?
< IoC >- 인터페이스를 사용하는 입장에서는 어떤 것을 쓸지 제어 할 수 없다=> 외부에서 관리함예: AppConfig vs. OrderServiceImpl< 깨달음 >- 라이브러리와 프레임워크 차이=> 라이브러리: 내가 만든 체계에서 직접 호출한다=> 프레임워크: 내가 만든 것을 알아서 호출한다< DI >- 정적인 클래스 의존 관계=> import만 보고 쉽게 파악 가능=> 세부 기능이 바뀌어도 바뀌면 안된다- 동적인 객체 의존 관계=> 실제 실행 봐야 알 수 있음=> 세부 기능에 따라 바뀜- DI:-- 인스턴스 생성한다-- 참조하는 값에 넣어준다< 깨달음 >- 의존 관계는 두가지 이다=> 정적: 클래스 의존 관계=> 동적: 객체 의존 관계- 툴로 분석 가능=> Intellij: diagram - show diagram- 설계 할 때는-- 인터페이스 설계 그리고-- 객체 설계 까지 두루 한다< IoC, DI 컨테이너 >- 뜻: 객체를 생성하고 연결해주는 역할을 하는 아이- 예: AppConfig, 스프링, Assembler, Object factory< 깨달음 >- 잘 만든 코드는 코드 블럭을 가지고 조립하는 것이다
-
스프링 핵심 원리 - 기본편
저처럼 소름 돋으셨나요?
[와우 포인트]고칠 때 차이- 구성 영역, 사용 영역 중 구성 영역만 바꾸면 된다-- 구성 영역: 대신, 구성 영역이 세세히 다 알아야 한다-- 사용 영역: 더 이상 손댈 필요가 없다.--- => 스프링 코드 짤 때 AppConfig 코드 외 아무 것도 손대지 않아도 된다- 개발자가 하는 일=> 최초에 사용 영역만 인터페이스만 사용해서 잘 만드는 것- OCP 지켜짐=> 구체화를 바꿔도 클라이언트 코드 바꾸지 않아도 된다==> 인터페이스를 사용하는 입장의 코드는 더 이상 인터페이스 구현체가 바뀌어도 바꾸지 않아도 된다- DIP 지켜짐=> 추상화만 의존==> 구현은 모름[팁]- Ctrl + R 하면 기존 실행된 것 실행됨
-
스프링 핵심 원리 - 기본편
리펙토링이 무엇인지 약간은 더 알것 같아요!
[리펙토링]- 역할들을 드러나게 하는 것 중요=> 인터페이스 반환 하는 부분이 안보임- 중복 제거=> 같은 구현 클래스를 여러 군데서 넣어주던 중복 제거[깨달음 점]- 리펙토링에서 것은 중복 제거하고 그런 것들을 하던 이유가 명확해졌다=> 역할과 구현 등 관계를 확인 하고 구조를 편하게 확인 하기 위해서 였다==> 앱 컨피그만 보아도 이 프로그램이 뭘 쓰고 있고 어떻게 돌아가는지 짐작이 간다 - intellij extract method 쓰면 refactor 쉽다
-
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
혹시저처럼 무료버전에서 옵션수정시 VM옵션 안되실떄
-까지 붙여주셔야합니다
-
스프링 핵심 원리 - 기본편
노트 정리해보았어요. 혹시 문제 있으시면 알려주셔요!
[문제점]- 클라이언트 (OrderServiceImpl) 고쳐야함=> OCP를 위반함- OrderServiceImpl이 DiscountPolicy 뿐만 아니라 구현 클래스 FixDiscountPolicy에도 의존하고 있다=> DIP를 위반함[해결 방법]- 1. DIP 해결 방법: 인터페이스만 의존 하게 한다-- => 코드 내에서도 객체 할당 X- 객체 할당 X 에서 생기는 NullPointer Exception 문제 해결 방법:-- => 대신 주입할 얘가 필요하다[강의 느낀점]- 실제 의존 관계 다이어그램에서 화살표를 보니 의존 관계가 확 와닿는다
-
스프링 핵심 원리 - 기본편
AppConfig의 역할이 너무 광범위 하지는 않을까요?
질문:- AppConfig의 역할이 너무 광범위 하지는 않을까요?- member service impl 에 주입하는 구체 클래스는 동적으로 runtime 시 정하는 방법도 있을까요? 깨달음:- final 변수를 만들면 기본 할당 또는 생성자를 통해서 할당 되어야 함- Command + E: 과거 했던 파일들 다보는 방법=> vim: ls[관심사의 분리]- 공연=> 역할의 구현을 누가 정하는가: 기획자- 기획자=> AppConfig[AppConfig]- 역할=> 구현 생성=> 역할에 설정=> 기획자로서 역할을 갖는 ROLE에 맞는 구현 ACTOR를 배정함- 역할에 설정 방법:-- 생성자 주입[Injection]- Injection=> 역할에 구체화를 부여- DIP를 지킨다=> 구현 클래스를 몰라도 된다.==> 역할인 인터페이스만 의존한다.- OCP를 지킨다=> (closed) 역할을 사용하는 클라이언트가 구현 클래스를 의지 않해서 구현이 바뀔 때마다 수정할 필요가 없다=> (open) 클라이언트 수정 없이 언제든지 추가 구현 클래스를 만들어서 클라이언트에 적용 할 수 있다- Dependency Injection=> 의존 관계 주입==> 클라이언트가 의존하는 것을 클라이언트 외부에서 주입
-
스프링 핵심 원리 - 기본편
순진한 개발자 여기 있어요
아래와 같이 정리해보았습니다. 혹시 더 필요한 부분이 있을까요? [agile manifesto]느낀점:- 기준을 제시해주어서 좋다- 개발 할 때 고려 할 기준:-- 개인의 생각을 중요시하고 상호 교류가 잘 일어나는 것이 중요-- 문서화 할 시간에 더 나은 제품-- 고객과 협력에 집중하고 계약 협상에 대한 생각은 나중에-- 필요에 따른 변화를 우선. 계획에 집착하기보다[test]깨달은점:- test 코드 파일 작성 쉽게 가능하다느낀점:- 아직 SOLID가 안되는 문제점은 말씀해주시지 않았다
-
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프로젝트 하려면..
현재 스프링 핵심원리와 mvc1편 완강했습니다! 이제 프로젝트를 해보고 싶은데기존 멤버리포지토리 방식말고 계속 저장되는 로그인기능(회원마다 데이터를 따로 관리하는 기술) 을 만들어 배포해보고 싶고 open api를 적용시키는 기술도 배우고 싶은데 강의를 어디까지 들어야 할까요? 또, 프로젝트를 제작하면서 강의를 들어도 될까요? 아니면 필요한 강의를 다 듣고 프로젝트를 진행하는게 좋을까요? 얼른 생각해놓은 프로젝트를 제작해보고 싶은데 제 실력이 어느정도인지 가늠이 안가고 기술도 어떻게 적용시켜야 할지 몰라 질문 남깁니다
-
스프링 핵심 원리 - 기본편
MemberRepository 공유가 되나요?
질문:- Member Repository가 OrderService와 MemberService 사이에 어떻게 공유 될 수 있을지=> 내 생각: final이 영향을 준다?=> 실제 답: repository 내 store가 static으로 선언되어서 그렇다느낀점:- 단위테스트가 중요하다=> 단위테스트로 점점 쌓아 점점 더 크게 테스트하는 것이다- 이렇게 역할과 구현을 나눠서 개발만 한 것도 잘한 것이다=> 실무에서 이렇게만 해주는 것을 1차 단계로 해보자
-
스프링 핵심 원리 - 기본편
discountPrice가 최종 할인된 가격 맞을까요?
[수업 노트 공유] 깨달음:1. 단일 설계 원칙을 잘 지켰다:- "Order 생성 시 DiscountPolicy는 나는 모르겠고~ 할 수 있다. 질문:1. discountPrice가 최종 할인된 가격 맞을까요?- discount 함수는 얼마나 할인 되는지를 알려주는 함수 아닌가요?
-
스프링 부트 - 핵심 원리와 활용
강의 순서에 대한 질문입니다
안녕하세요사실 수업 전 질문에 올리는게 맞는 내용같은데 제가 냅다 스프링관련 전 강의를 사버려서 그 카테고리엔 질문이 안되어 이쪽에 문의드립니다 자바 기초정도만 알고있는 상태인데 스프링 강의 전혀 듣지 않고 스프링부트만 들어도 괜찮을까요?현재 국비 수업을 듣고있고 곧 프로젝트인데 부트로 진행하게되어서요학원 강의가 많이 부족한 편이라 해당 강의를 먼저 들으려하는데 이 강의만 들어도 프로젝트에 문제 없을까요?아님 시간이 좀 걸리더라도 스프링먼저 듣고오는게 좋을까요?