= '''2019.05.15 ZeroPage 정모''' = [[TableOfContents]] == OMS == OMS 주자 : 24기 [김정민] 학우 - 봄이 좋냐? === 제목 유래 === 왜 제목이 봄이 좋냐였나? : 봄... 봄... Spring... Spring framework... (의식의 흐름)... 아무런 생각이 없어서. === 그래서 스프링이 뭐죠? === Spring 프레임워크란? 말 그대로 프레임워크, 서버 프로그램을 만드는 프레임워크. 어 그럼 서버는 뭐죠? 뒤에서 설명 === 스프링의 특징 === Spring의 가장 큰 특징 두개 * DI (의존성 주입) * AOP (관점 지향 프로그래밍) 오른쪽 로고 친숙하죠? ㅎ === 근데 프레임워크가 뭐죠? === Framework란? 뼈대, 골격, 틀 이런 뜻. Library랑 다르다. * Library = 필요한 기능을 짜둔 것 * Framework = 이리 만들고 구현하라 강요하는, 즉 형태를 짜주는 것 ==== 프레임워크에서 중요한 점 ==== Framework에선 IoC (제어 역전)이 중요하다. * 라이브러리를 쓸땐 여러분의 코드가 라이브러리를 부른다. * 프레임워크를 쓸땐 프레임워크가 여러분의 코드를 부른다. === 그래서 앞서 말한 서버가 뭐죠? === 저도 몰라요 그러니 예시를 들어서 설명할께요. ==== Client-Server 모델 예시 ==== 네이버를 접속하면 네이버가 나오죠? 이 네이버, html파일을 전송해주는 애는? 서버 (회장님 질문: 프로그래밍 언어인가요?) 아니에요~ ==== 인프라 모형 예시 ==== 그림 : Presentiation Layer > Application Layer > Data Layer 여러분이 보는 거 있고 그 밑에 그걸 주는 서버 있고 그 밑에 데이터 주는 서버 있고 스프링은 중간을 만들게 해주는 프레임워크다~ 이 말이야! ==== 다시 설명해드리죠 ==== 브라우저(아닐 수도 있지만)가 요청을 하면 html을 보내주는 애가 서버에요. 이 요청은 다양해요. 로그인 요청일 수도 있겠죠. 이런 다양한 요청을 받아주고 결과물을 html로 던저주는 게 스프링이고요 html이 아니라 json같은 다른 형식일 수도 있어요. === 근데 사실 앞서 말씀드린 것들은 === 스프링만의 특징이 아니에요. django, flask 같은 애들도 이런 특징을 가지고 있습니다. 클론이요? 저도 모르는데 넣어봤어요. 익스프레스? 까먹고 못 넣었네요. 암튼 이런 다양한 프레임워크들이 있어요. === 그래서 스프링은 뭐가 다르죠? === 두가지가 있어요. ==== Dependenc Injection ==== 프레임워크가 니 코드를 부르지. 니 코드가 프레임워크를 부르지 않아요. IoC랑 혼동되기도 하는 개념이에요. 완전히 분리되지 않은 개념이라서... 각 class를 bean object로 구성하여 Container가 관리합니다. 그러면 bean들끼리는 서로 몰라도 되는, 결합도를 낮추는 거에요. 이것을 '''의존성을 주입'''한다고 말해요. ===== 어떻게? ===== Request가 온다 -> 디스패쳐 서블렛이 핸들러를 볼러용 -> 핸들러를 매핑해요. -> 핸들러가 컨트롤러를 불러용 -> 뷰 리솔버가 뷰를 볼러요. ... 이렇게 간접적으로 이어지게 하는거에요. 잘 모르겠죠? 저도 잘 몰라요. 구현 해봐야 아는데 ==== AOP(Aspect-Oriented Programming) ==== 이거 쓴다고 OOP를 못 쓰는 건 아니에요. 하나의 구현방식이라 생각하시면 되고요. 코드의 중복을 방지해주는 거에요. ===== 개념 ===== join point : 프로그램 실행 중 어떤 시점에서 실행할지 지정해주는 것, Spring에선 method call의 시작점, before? after? 이런식을 구현해요. Advice : 특정 join point에서 수행되는 동작. 예를 들어 세션으로 관리자가 맞는지 검사한다던지... 다양한 게 있겠죠? 그런식으로 권한 관리, 로깅 이런걸 할 수 있게. @Aspect와 @Around를 써서 무언가를 할 수도 있어요. ==== Annotation ==== 키워드들을 이용해서 자동으로 bean 설정을 해주는거에요. @Autowired를 넣으면 이걸 감지해서 자동으로 주입해주는... 뭐 이런 기능 xml이랑 겹치면 헷갈리면 하나만 쓰시든 기준을 세우든 하시면 됩니다. === 까먹은 것 === Spring은 원래 Enterprise용이에요. 스프링을 쓴다면 팀프로젝트일 가능성이 높지 않을까~ 그래서 언제 어노테이션을 쓰지 이건 어떻게 구현할지 미리 합의를 해두시고 시작하시는 게 좋을 겁니다. === 기타 === ORM, Spring Security, Spring Boot 있고요 스프링의 장점은 한글자료가 많다는 겁니다. 왜나고요? 정부에서 자바개발자를 찍어낼때 스프링을 가르쳤기 때문에... 학습하기 쉬울 수도 있어요. 물론 영어보단 낫다는 느낌입니다. === Q&A === '''Q.''' 스프링을 어떻게 시작하면 좋을까요? '''A.''' 부트로 시작하세요. "스프링 따라하기" 이런거 치면 자료 많아요. === OMS 다음 주자 === 송정우의 "HTML 하는 사람은 프로그래머일까요?" == 스터디 및 프로젝트 == * '''스터디 활동 공유''' === '''스터디''' === || 스터디 이름 || 분야 || || || [Shaprest++] || C++ || 19, 18강 했음. || || [앙기모와 머머리] || 모의투자 || 다음 주부터 주식 API 다룬다고 들었음. || || [J를기다리며] || 머신러닝 || 텐서플로우를 시작할 것임. || || [사과세요] || IOS 앱개발 || 테이블을 다이나믹하게 다루는 걸 배움 || || [JS한방병원] || JavaScript || 폐강할 예정 (자바스크립트를 할 이유가 없어져서) || || ["그치만 HTML은 프로그래밍언어라구욧!"] || 웹 || 자바스크립트 || || [블리는 어썸할거야] || [:블리는어썸할거야/진행내역 블리는 어썸할거야/진행 내역] || 지난 주에 실수표현 표준에 대해 공부하고, floating point도 나오길래 잠깐 다룸. || || [:준비하자프로그래밍경시대회 준비하자 프로그래밍 경시대회] || 알고리즘 || 이번 주 NPC때문에 휴강 || || [운?췌!] || 운영체제 || 스터디룸 못 빌려서 못 함. || || [:NotKill Not Kill] || 코틀린 || 다다음주에 앱 만들 듯 || || [알고리즘알고하냐] || 알고리즘 || 혼자 했음. || || [Menu_Tab] || 텝스 || DAILYEE로 이름 바꾸고 진행중임. || === '''프로젝트''' === || 프로젝트 || 진행 사항 || || [caucsenotice] || || || [Robot_Study/OpenManipulator] || Controller 코드 이해, 사용방법 파악 완료, init state까지 제작 || || [무제] || || == 활동 소식 == * "아무콘솔대잔치"로 대회명이 확정됨. * 나머지는 공지방에 나와있음. * 1:1 매칭을 위해 수요조사중. * 구글 폼에 한번씩 작성해주세요. * 멘토는 랜덤배정이지만 바뀔 수 있음. == Comment == * 310관 B312 선호합니다, 앞으로 여기서 했으면 좋겠습니다. - [우준혁] ---- [활동지도/2019]