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

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으로 바꾸면 강한결합에서는 인식할수..

서블릿 매핑(Servlet Mapping)이란

위의 full path는 서블릿의 경로를 통해서 포트번호, 서블릿이름, 해당서블릿의 위치가 보인다. 그래서 보안 취약함. 따라서 mapping을 사용하는데, context-path는 그대로 똑같이 사용하지만, 간략하게 "닉네임을 준다"라고 생각하면 편하다. 그 "닉네임을 주는 것"을 servlet Mapping이라고 한다. 방법1: XML파일을 이용하는방법(아직 사용하긴함) 동적 웹 프로젝트에서 web.xml에서 서블릿을 등록함 패키지명을 포함한 경로에서 마지막 부분인 서블릿이름을 에 넣고 에 "닉네임"으로 사용할 것을 입력해주면 매핑 성공! 방법2: Java Annotation을 이용한 매핑(현대적) servletEx.java와 같은 파일에서 어노테이션을 하면 바로 출력된다. 위의 두가지 방법으로 각각..

스프링(Spring) 프로젝트의 폴더 구조

- Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.1.1 Release - Build Tool : Maven 3.6.3 먼저 Spring MVC 템플릿으로 스프링 프로젝트를 하나 생성해보겠습니다. 빌드툴은 메이븐을 사용합니다. 폴더 구조가 꽤 복잡한데, 하나하나 살펴보도록 하겠습니다. 1. src/main/java 자바(.java) 파일이 모여있는 곳입니다. 패키지로 잘 분리해서 자바 클래스를 생성해 사용하면 됩니다. 스프링에서 이미 MVC 패턴의 서블릿 구조를 잡아주기 때문에 따로 서블릿을 만들 필요 없이 스프링 구조에 맞춰 클래스 파일들..

<우아한 스프링 부트> 정리

www.youtube.com/watch?v=z0EaPjF3pCQ 1. 어플리케이션을 만들어서 어떻게 배포하냐에 따라 2가지선택. JAR(Java Archive) : 기본 이것부터 사용해보길 권장. WAR(Web Application Archive) : 톰캣같은곳에 배포할때 사용. 2. 의존성추가 : 스프링부트가 제공해주는 주요 기능 중 하나 pom.xml에는 버전정보가 없지만 dependency management에 버전이 정의가 되어있다. springboot에 버전을 명시하지않아도 되는것은 장점 + 현재 버전에 최적화되어있는것을 알아서 찾아놨기때문에 springboot가 좋은것이다. springboot가 관리해주지 않는 dependency는 버전 명시해야됨. 3. 프로젝트 생성 1. 메이븐에서 실행 :..

2. 기본적인 프론트엔드 지식

퍼블리싱이란 ? 웹/앱의 분야 중에 최종 단말기(예: 브라우저)에서 표현되는 내용을 작성하는 행위를 말합니다. publish(출판하다) + ing(~을 하는 중)의 합성어로서, 주로 html, css, javascript 와 같은 언어를 이용하여 브라우저에 보여지는 최종적인 형태를 만들어내는 것을 의미합니다. 1. HTML Hyper Text Markup Language 약어로 HyperText(웹 페이지에서 다른 페이지로 이동할 수 있도록 하는 것) 기능을 가진 문서를 만드는 언어다. 아래는 기본 HTML5 문서타입이다. DOCTYPE 종료하는 태그가 없는 것이 특징이며 은 HTML 문서의 구성 요소는 아니다. html은 크게 두가지로 나눈다. 콘텐츠를 표현하기위한 내용 태그는 (문서자체를 설명하는정보..

JDBC, JPA/Hibernate, Mybatis의 차이

백엔드 로드맵을 보다가 Mybatis, Hibernate의 차이점에 대해 검색을 하다가 공부하게 되었다. Persistence FrameworkJDBC : 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장한다. Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다.아래 참고Ex) JPA, Hibernate, Mybatis 등 # SQL Mapper SQL Object 필드 SQL Mapper는 SQL 문장으로 직접 데이터베이스 데이터를 다룬다. 즉, SQL Mapper는 SQL을 명시해줘야 한다. Ex) Mybatis, JdbcTempletes 등 # ORM(Object-Relationa..

1. 인터넷(작동원리,HTTP, 브라우저, DNS, 호스팅)

인터넷은 어떻게 작동될까요? HTTP는 무엇일까요? 브라우저와 동작 원리 도메인 네임은 무엇일까요? DNS와 작동원리 호스팅은 무엇일까요? 1. 인터넷은 어떻게 작동될까요? 인터넷 변화 양상 ① 컴퓨터 ↔ 컴퓨터 ② 컴퓨터 ↔ 라우터 ↔ 컴퓨터 ③ 컴퓨터 ↔ 라우터 ↔ 라우터 ↔ 컴퓨터 ④ 컴퓨터 ↔ 라우터 ↔ 모뎀 ↔ 전화 시설 ~ ⑤ 컴퓨터 ↔ 라우터 ↔ 모뎀 ↔ 전화 시설 ↔ ISP (↔ ISP) ↔ 전화 시설 ↔ 모뎀 ↔ 라우터 ↔ 컴퓨터 인터넷은 1:1 연결 => 多:多 연결 => 라우터 연결 과 같은 방식으로 발전했고, 아래는 라우터 연결의 예이다. 이후 라우터와 라우터를 연결하면서 점점 망의 크기를 키운것이 인터넷이다. 최종적으로는, 인터넷 서비스 제공 업체(ISP, Internet Serv..

파이썬 구글 이미지 크롤링(uh oh! keywords is a required argument, unfortunately all 20 could not be downloaded because some images were not downloadable. 0 is all we got for this search filter!)

pypi.org/project/google_images_download/ google_images_download Python Script to download hundreds of images from 'Google Images'. It is a ready-to-run code! pypi.org 예시) from google_images_download import google_images_download #importing the library response = google_images_download.googleimagesdownload() #class instantiation arguments = {"keywords":"김남길, 고현정, 위너 진우, 방탄소년단 진","limit":20,"print..