일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- exception
- ApplicationContext
- 링커
- DesignPattern
- 자바
- DispatcherServlet
- 토비의스프링
- 링킹
- Immutable
- 빌드툴
- java
- 컴퓨터시스템
- String
- Kotlin for Java Developers
- FunctionalInterfaces
- Spring
- 프록시
- IOC
- 토비의스프링3.1
- 클린코드
- springboot
- ORM
- gradle
- beanfactory
- hibernate
- AutoConfiguration
- lambda
- JPA
- 메이븐
- springwebmvc
- Today
- Total
목록분류 전체보기 (98)
엔지니어로 가는 길

출처: http://docs.oracle.com/javase/tutorial/java/annotations/ annotate add notes to (a text or diagram) giving explanation or comment. 어노테이션이란 메타데이터의 형식으로 프로그램에 대한 데이터(이는 프로그램의 일부는 아니다)를 제공한다. 어노테이션은 가리키는 코드의 동작에 직접적인 영향을 미치지는 않는다. 어노테이션의 용도 컴파일러을 위한 정보 제공 어노테이션은 에러를 잡아내거나 경고를 무시하기 위해 컴파일러에 의해 사용될 수 있다. 컴파일 타임, 개발 타임 처리 소프트웨어 도구는 코드, xml 파일 등을 생성하기 위해 어노테이션 정보를 이용할 수 있다. 런타임 처리 일부 어노테이션은 런타임에 사용될..
http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html 우리는 컴퓨터로 조종하는 자동차 소프트웨어 프로그래머다. 우리는 자동차를 조종하는데 사용하는 메소드를 가진 인터페이스를 만들었고 잘 사용중이다. 근데 만약 자동차에 새로운 기능을 추가해야 한다면 어떨까? 그냥 기존의 인터페이스에 메소드를 추가하면 될까? 기존의 인터페이스에 메소드를 추가하면, 인터페이스를 구현한 클래스도 수정해야만 한다. 인터페이스를 구현하는 클래스는 abstract 클래스가 아닌 이상, 인터페이스의 모든 메소드를 구현해야만 하기 때문이다. static 메소드로 추가한다면, 동료들이 새로운 메소드를 필수적인 메소드가 아니라 유틸리티성 메소드로 여길지 모른다. 이럴 ..

@RequestParam 또는 @PathVariable로 들어온 값을 객체로 받으려면 Formatter가 필요하다. String 타입 변수 name을 갖는 Person 클래스가 있다. 컨트롤러에서 위와 같이 name을 String이 아니라 바로 Person 객체로 받고 싶다고 해보자. 테스트를 돌리면 MethodArgumentConversionNotSupportedException가 발생한다. 매우 직관적인 이름이다. 컨트롤러의 인자로 Person 타입을 받겠다고 했는데 실제로 주어진 것은 String 타입이었다. String이 Person으로 conversion되지 않아서 예외가 발생한 것이다. 이렇게 Formatter를 등록(spring boot는 Formatter를 따로 등록할 필요 없이 빈으로만 ..

컴퓨터가 C언어를 이해할 수 있을까? 요즘은 프로그램을 소스 코드로 작성한다. 소스 코드는 인간이 이해할 수 있는 언어로 작성한 코드이다. 시스템은 소스 코드를 이해할 수 없다. 시스템은 기계어만 이해할 수 있다. 따라서 누군가 소스 코드를 기계어로 번역해주어야 한다. (C언어의 경우) 컴파일러와 어셈블러가 번역 과정을 맡는다. 먼저 컴파일러가 소스 코드를 어셈블리어로 번역해놓고 나면, 어셈블러가 어셈블리어를 기계어로 번역한다. 소스 코드를 한 번에 기계어로 번역해주지 않고 왜 굳이 두 단계로 나누었을까라는 의문이 들었다. 하지만 만들어진 순서를 생각해보면 당연한 결과인 것 같다. 프로그래밍 언어의 시작부터 사람이 이해할 수 있는 언어가 있었던 것이 아니라, 처음엔 기계어에서부터 시작했다. 기계어는 0과..

Common Gateway Interface(CGI)란 서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션을 CGI라고 한다. 아래 그림을 참고하자. 유저가 웹페이지를 요청했을 때 서버는 요청된 페이지를 보내준다. 하지만 유저가 웹페이지에서 특정 form을 채운 뒤 웹페이지를 보내면 이는 보통 애플리케이션에 의해 처리되어야 한다. 웹서버는 보통 form 정보를 처리해줄 애플리케이션 프로그램에 정보를 보내고, confirmation 메시지를 돌려준다. 예를 들어, 회원가입 정보라면 서버는 이 정보를 애플리케이션에 보내 회원가입 관련 로직이 수행되도록 할 것이고, 애플리케이션은 회원가입 로직을 수행한 뒤 결과를 서버에 다시 보내줄 것이다. 이렇게 서버와 애플리케이션이 소통할 때 CGI 기반으로 만..

책 소개 이 책은 내가 꿈꾸고 있는 이상적인 개발 환경의 중심에 있다고 할 수 있는 빌드 환경을 메이븐 기반으로 구축해 가는 과정에 대하여 다루고 있다. 메이븐을 한 번도 써보지 않은 상태에서 메이븐을 도입하여 프로젝트를 구축해나가는 과정이 담겨있기 때문에 메이븐에 대해 아예 모르는 사람일지라도 이해하는데 어려움이 없을 것 같다. 새로운 무언가를 익힌다는 건 참 고된 일이다. 어떻게 하면 덜 힘들게 배울 수 있을까? 언제 배워야 할까? 생활코딩을 운영하는 이고잉님의 말이 떠오른다. "어떤 문제를 만나서 그 문제가 주는 좌절이 그 문제를 해결할 새로운 기술을 배우는데 드는 고통보다 더 클 때가 새로운 무언가를 배울 적기이고, 이럴 때 배우면 새로운 무언가를 익히기가 덜 힘들다." 이 책이 마음에 드는 가장..

웹 환경에서 스프링 애플리케이션의 동작 방식 스프링 웹 애플리케이션도 결국 스프링 애플리케이션이므로 빈을 생성하고 관리해줄 IoC 컨테이너가 필요하다. 이때 사용되는 IoC 컨테이너가 바로 WebApplicationContext로, 이름 그대로 웹 환경에서 사용할 때 필요한 기능이 추가된 ApplicationContext이다. 웹 환경에서 스프링 애플리케이션의 동작 방식을 이해하려면, 우선 일반적인 스프링 애플리케이션의 동작 방식을 이해해야 한다. 일반적인 스프링 애플리케이션은 IoC 컨테이너가 빈 설정 메타 정보를 이용해서 빈 객체들을 만들고 DI(의존성 주입)를 수행한 후에 최초로 애플리케이션을 기동할 빈 하나를 제공해줌으로써 (마치 자바 애플리케이션에서 main() 메소드를 호출하듯) 동작한다. 스..

스프링 애플리케이션의 동작 방식 스프링 IoC 컨테이너는 빈(Bean) 설정 메타정보를 이용하여 빈 객체(Object)를 만들고 DI(Dependency Injection) 작업을 수행한다. 하지만 이것만으로는 애플리케이션 동작하지 않는다. 자바 애플리케이션의 main() 메소드처럼 어디에선가 특정 빈 오브젝트의 메소드를 호출함으로써 애플리케이션을 동작시켜야 한다. 즉, 적어도 한 번은 위의 예와 같이 IoC 컨테이너에게 요청하여 빈 객체를 가져와야 하는데, 이때는 반드시 getBean()이라는 메소드를 사용해야 한다. 그러나 그 이후로는 다시 getBean()으로 빈 객체를 가져올 필요가 없다. 빈 객체들끼리 DI로 서로 연결되어 있으므로 의존관계를 타고 필요한 객체가 호출되면서 애플리케이션이 동작하기..

https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html Method references 람다 표현식에서 하는 일이라고는 이미 존재하는 메소드를 호출하는 게 전부인 경우 Method references를 사용할 수 있다. 이는 말 그대로 (일반적인 람다 표현식의 문법을 따르는 것이 아니라) 그 메소드의 이름을 언급하는 것인데 람다 표현식을 사용한 것보다 간결하고 명확하다. Person이라는 클래스를 예로 들어보자. age라는 변수를 가지고 있고, compareTo는 두 개의 Person 객체를 인자로 받아 age를 비교하는 static 메소드이다. 세 개의 Person 객체를 만든 뒤 배열에 넣고 Arrays의 sort 메소드를 ..

https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html standard functional interfaces는 java.util.function에 있는 인터페이스로 java 1.8부터 지원한다. Consumer는 standard functional interfaces 중 하나이다. Interface Consumer 하나의 인자를 받아 연산을 수행하지만 아무것도 리턴하지 않는다. 다른 대부분의 functional interfaces와 달리 side-effects를 기대하는 인터페이스..