웹(Web)/백엔드(Backend) 42

하드코딩하면 안되는이유

https://www.youtube.com/watch?v=VzsXPR25pYw 백엔드 개발자는 아래 두 종류로 나뉜다. 알고리즘+최적화 JSON+I/O(DB설계도 같이 관여) => DB설계를 어떻게 해야되는지..비판적인 시각으로 바라봐보기 자기 PR 못하는사람은 업무일지를 작성해보기. => 어떤 요구, 회의가 오갔는지, 시스템의 주요 개념단위가 어떻게 정리되었는지 등등 내가 백엔드 개발자면, 개념을 정립해서 설계를 주도권을 쥐고 전파해주면 좋다. => FE개발자와 협업할때의 상황을 보자. 기획자에게 계획을 받았으면 설계도부터 그려서 기획자가 의도한 바가 맞는지 요구사항을 확립한다. 그리고 프론트개발자에게 api등을 정리해서 전달해준다. 하드코딩 X, 기획서작성하고 테스트케이스 작성해서 만들어내야함. SI..

[JAVA] Spring boot 공부방향

1. 완전초보일때 참고할 깃허브 https://github.com/next-step/spring-learning-test next-step/spring-learning-test Contribute to next-step/spring-learning-test development by creating an account on GitHub. github.com 2. 완전 처음일때 강의추천(김영한님 로드맵따라가기) https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8 [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근..

Spring과 React/Vue/Angular 연결

웹프레임워크(ex) Spring, Django )을 통해서 정적사이트를 만들 수 있다. SPA(홈페이지는 그대로인데 내용만 바뀌는것)는 정적사이트(전체페이지가져옴)를 보완하기 위해 AJAX를 통해 구현함. 하지만, SPA를 위한 프레임워크가 있음(JS로 구성된 Angular, React, View)를 통해서 만들 수 있다. 따라서, 웹 페이지를 구축할때는 아래와 같이 한다. 프론트- JS를 이용한 React/Vue/Angular 로 웹페이지 만들기 백엔드- Java+SpringBoot로 구축 => 왜 React/Vue/Angular로만 만들지 않는가? : 대표적으로 DB를 연결하려면 Spring이 필요하다. 즉, DB외에도 다른 서비스들을 연동하려면 백엔드단으로 따로 나누어 Spring의 도움이 필요한것..

객체지향 디자인패턴1 feat.예시로 이해

1. 싱글톤 패턴(Singleton Pattern) : 다크모드를 각 페이지에 적용할때, 생성자를 private으로 만들어서, 다른페이지에서 그대로 가져다 쓰게 만드는 것이라고 본다. 2. 전략 패턴(Strategy Pattern): 각 버튼에 따라서 다르게 검색. if문에 따라서 onclick메소드를 바꾸는것. => 좋지 않음. 모드마다 동작 하나하나를 다르게 갈아껴주는 방식. 옵션마다 implements. 3. 상태 패턴(State Pttaern) : 전략패턴과 비슷하지만 메소드가 실행될때 모드도 전환되는것. 4.커맨드 패턴(Command Pattern) : 그리드에서 로봇이 움직이는 것. => 추상클래스로 Command. Kit를 만들어서 수행하게 할 수 있음. 5. 어댑터 패턴(Adapter Pa..

스프링 XML --> JAVA Configuration으로 변경

1. @Configuration 2. @ComponentScan("spring.di.ui") 3. @Bean : 우리가 만든것을 컨테이너에 담아준다. NewlecDIConfig.java 를 만들어 JAVA Configuration을 한다. @ComponentScan("spring.di.ui") @Configuration public class NewlecDIConfig{ @Bean //public Exam getExam(){ //반환할때, 인터페이스로 받기 때문에 public Exam exam(){//id의 이름으로 메소드를 만드는것이 바람직 return new NewlecExam(); } } ApplicationContext context = new AnnotationConfigApplicationCo..

스프링 어노테이션을 이용한 객체생성/초기값(@Value)

소스코드로 옮기는작업을 하는것이다. Component-scan이 꼭 필요함을 알려줌. 더보기 www.youtube.com/watch?v=DNrkw3pAsAM&list=PLq8wAnVUcTFWxnsrMu5kS_jt_o8gpEiTR&index=15 www.youtube.com/watch?v=pyMzPpK4uXk&list=PLq8wAnVUcTFWxnsrMu5kS_jt_o8gpEiTR&index=16 "spring.di.ui"라는 패키지 안에 들어가서 클래스들이 있을텐데, 거기 들어가서 클래스 읽어줄래? 스캔해봐서 component가 있는지 찾아봐. 거기 컴포넌트가 있으면 객체화 시켜줘. @Component를 읽으면 안쪽에 있는 걸(Autowired부분) 읽어버림. 따라서 XML부분에서는 객체 생성하는부분을 다..

스프링 어노테이션(Annotation), @AutoWired과 @Qualifer

1. XML로 설정 XML을 매번 바꿔야되므로 귀찮으니 발전해서 소스코드를 읽게해줌. -> 따라서 java코드에서 @Component를 인식해서 객체화함 @Autowired를 통해서 Xml에 있던객체를, 코드에다가 객체를 모두 박아버리는것이다. 위 한줄만 추가해주면 된다. => 객체를 만들어놓고 "그 안을 들여다봐라" 라는 뜻 => 그래야 @Autowired를 통해서 안을들여다보고 자동으로 설정 (추가해주지 않으면 탐색을 하지 않으므로 NullPointerError 뜬다.) @Autowired : 자동으로 연결해준다는것은 문제가 될 수 있다. @Qualifer : 객체가 여러개일때 식별이 모호할경우 명시해주기 위해 사용한다. bean에 모호한 exam이 여러개 등록되어있다. id="exam"으로 하면 @..

스프링 IoC 컨테이너 사용(ApplicationContext 사용)

"어떻게 만들어달라"는 지시서를 전송 1. maven사용 -> spring.io 라이브러리를 pom.xml에 불러옴. 2. ApplicationContext 사용. ClassPathXmlApplicationContext로 생성. 두가지 방식 다 된다. 첫번째 방법: Bean이라는 녀석을 만드는데 이름가지고 "console"이라는 애를 꺼내면, 형식변환을 해서 써야함. => 객체에 대한 형식을 모르기때문에 Object형으로 나오므로 형변환해야함. 두번째 방법: 자료형 명으로 꺼낼 수 있다. => 인터페이스 형식(ExamConsole.class)에 참조된 녀석을 찾아서 거기에 맞게 얻어다줌. 값 형식 DI 위처럼 property value값을 넣어줄 수 있다. 생성자로 받는것은 java코드는 아래와같다. 그..

IoC컨테이너(Inversion of Control)란

컨테이너에 담겨져있는것이 무엇이냐에 따라서 '무슨 컨테이너'라고 불린다. 앞서 우리는 부품을 Dependency에 비유했다. (이전글 : 의존성 주입 참고) 2021.04.04 - [웹(Web)/백엔드(Backend)] - 의존성주입(DI, Dependency Injection)이란 부품 컨테이너 => Dependency 컨테이너 => IoC 컨테이너 그렇다면 왜 IoC컨테이너라고 부를까? Dependency 컨테이너라고 부르지 않고 말이다.. 주문서에다가 어떤부품을 생성해주세요 -> 조립해주세요해서 담아달라하면 이렇게 생성된다. 제품 조립 순서를 짚고 넘어가자. 소비자의 경우 A가만들어지면 B가만들어지고...D가 만들어진다. 따라서 소비자는 뒤에있는 부분은 알아서 만들어져서 조립과정을 모름 하지만 조립..

의존성주입(DI, Dependency Injection)이란

1. 객체 A는 B,C의 기능을 사용한다고 볼수있지만, 객체 B,C의 기능에 의존한다. 2. A가 B,C의 기능이 필요한경우 외부에 있는 갑한테 B,C의 기능을 주입받는다. 이렇게 외부에서 의존성을 주입시켜주고 관리하는것이 JAVA에서는 "Spring" 이다. 위의 1,2번 케이스를 개발자가 직접 해당 객체의 라이프사이클들을 다 관리하면(강한결합) 힘들다. 따라서 외부에서 객체B,C와 같이 만들어서 주입만시켜주는 경우(약한결합) 개발자가 편해진다. 객체지향 프로그래밍에서는 위처럼 "약한결합"을 사용하기 위해 Spring을 이용한다. 아래는 예시코드이다. 위처럼 객체를 직접 만들면 강한결합, 가져오면 약한결합이다. Why 약한결합사용? class에서 생성자를 private으로 바꾸면 강한결합에서는 인식할수..