일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 링커
- 자바
- 토비의스프링3.1
- DesignPattern
- 메이븐
- FunctionalInterfaces
- Kotlin for Java Developers
- 클린코드
- Immutable
- exception
- java
- ApplicationContext
- hibernate
- Spring
- 컴퓨터시스템
- IOC
- DispatcherServlet
- 프록시
- 빌드툴
- String
- springboot
- 토비의스프링
- gradle
- springwebmvc
- AutoConfiguration
- JPA
- lambda
- 링킹
- ORM
- beanfactory
- Today
- Total
목록분류 전체보기 (98)
엔지니어로 가는 길

우리는 편의상 메모리를 단순히 바이트들의 선형 배열로 여기고, CPU가 각 메모리 위치에 상수 시간 안에 접근할 수 있다고 생각한다. 하지만 실제 메모리는 조금 복잡하다. 메모리 계층구조 메모리는 다음과 같이 계층구조를 갖는다. 메모리는 왜 계층구조일까? 우리는 속도가 빠르면서 용량이 큰 메모리를 원한다. 속도와 용량은 trade-off 관계에 있다. 속도를 빠르게 하면 용량이 떨어지기 마련이고, 용량을 키우면 속도가 떨어지기 마련이다. 그러나 계층구조를 이용하면 속도도 빠르고 용량도 큰 마법같은 메모리를 사용하는 것 같은 착각을 얻을 수 있다. 이게 어떻게 가능한걸까? 먼저 캐시와 지역성을 이해해야 한다. 캐시 '캐싱한다'는 말이 있다. 이 말은 무언가를 저장한다는 말이고, 그 무언가는 당연히 앞으로 ..

Converter Converter란 객체를 다른 객체로 변환해주는 일을 한다. 예를 들어, Spring boot에서 문자열을 과일이라는 객체로, 과일이라는 객체를 문자열로 변환하고 싶다면 다음과 같은 Converter를 빈으로 등록해주어야 한다. DomainClassConverter DomainClassConverter도 Converter인데 이름에서 알 수 있듯 도메인 객체를 다른 객체로, 또는 다른 객체를 도메인 객체로 변환해주는 일을 한다. Spring data jpa를 사용하면 DomainClassConverter가 자동으로 등록된다. Spring MVC 컨트롤러에서 매우 유용하게 사용할 수 있다. 위의 예시를 보면 showuserFrom 핸들러는 @PathVariable을 통해 url에 있는 ..

결론 axios post의 두 번째 인자를 null로 주고, 세 번째 인자에 매개변수를 주어야 한다. (아니면 jquery를 사용해도 된다. 참고: github.com/axios/axios/issues/1281) 문제상황과 해결 방법 백엔드(Spring boot) /users/register로 오는 POST 요청을 담당하는 핸들러이다. (컨트롤러에 @RequestMapping("/users")가 붙어있는 상황이다.) User는 userId와 password라는 필드를 갖고 있어서 요청하는 쪽에서 매개변수로 userId, password를 넘겨주면 User라는 객체로 바인딩되어 핸들러에게 전달된다. 핸들러는 이 객체를 데이터베이스에 저장한다. 프론트(React) 결과 User에 아무것도 바인딩되지 않았다...

Hacktoberfest 핵토버페스트란 10월 한달 동안 열리는 오픈소스 관련 축제이다. hacktoberfest.digitalocean.com 10월 한 달 동안 'Hactoberfest' 토픽이 붙은 github 저장소에 4개의 pull-request를 요청하고 승인받은 선착순 70,000명은 상품으로 티셔츠를 받을 수 있다. ! pull request를 요청한 뒤 승인을 받아도 2주 간의 유예기간 뒤에 카운트된다. 티셔츠를 받기 위해 아무 오픈소스 저장소에 아무 의미 없는 커밋을 하나 작성하는 스팸성 pull request를 방지하기 위함이다. 후기 티셔츠를 받으려고 신청했다. 하지만 티셔츠 이상의 가치를 경험했다. 덕분에 처음으로 깃헙에 올라온 다른 사람들의 저장소를 관심있게 들여다보았고, 처음으..

지난 글에서 프록시란 무엇인지 알아보았고, 간단한 프록시 예제를 하나 살펴보았다. 프록시(Proxy)란 무엇인지 자바 코드로 보자 프록시(Proxy)란 무엇인지 자바 코드로 보자 Proxy Proxy의 사전적 정의는 대리인이다. 자바에서 프록시는 타겟의 기능을 확장하거나 타깃에 대한 접근을 제어하기 위한 목적으로 사용하는 클래스를 말한다. 여기서는 기능을 확장하는 프록시 live-everyday.tistory.com 이번에는 지난 시간의 예제를 발전시켜 자바를 통해 다이나믹하게 프록시를 구현하는 방법을 살펴보도록 한다. '다이나믹하게'라는 뜻은 코드로 일일이 프록시를 만드는 것이 아니라 런타임에 프록시가 생성되는 것을 의미한다. 먼저 왜 다이나믹하게 프록시를 구현해야 하는지 살펴보자. 프록시 구현의 문제..

프록시 Proxy의 사전적 정의는 대리인이다. 자바에서 프록시는 타겟의 기능을 확장하거나 타깃에 대한 접근을 제어하기 위한 목적으로 사용하는 클래스를 말한다. 여기서는 기능을 확장하는 프록시의 예시를 보도록 한다. Hello라는 클래스의 메소드가 대문자로 변환된 문자열을 리턴하게 하고 싶다고 해보자. 이때 프록시를 이용하면 Hello의 메소드를 변경하지 않은 채로 ‘대문자로 변환’이라는 부가 기능을 추가할 수 있다. 여러 구현 방법이 있지만 지금은 프록시의 개념을 이해하는 것이 목적이므로 인터페이스를 통해 간단하게 구현하는 방법을 알아보자. 위와 같이 Hello라는 이름의 인터페이스를 만든다. HelloTarget이라는 클래스를 만들어 Hello를 구현한다. 다음으로 HelloUppercase라는 또 다..
모르는 게 정말 많다. 그래도 이제는 뭘 모르는지, 어떻게 검색하는지 정도는 아는 수준이 되었다. 한글로 작성된 좋은 자료도 있지만, 영어로 된 자료가 압도적으로 풍부하기 때문에 먼저 영어로 검색을 하는 편이다. 여태까지는 영어로 쓰인 글을 읽을 때 짧으면 그냥 읽고, 길다 싶으면 대충 눈에 들어오는 몇몇 문장을 읽은 다음, 원하는 정보를 얻지 못하면 다음 사이트로 이동했다. 그렇게 뒤적거리다가 짧게 잘 요약된 글을 찾지 못하면 다시 처음 그 사이트로 들어가서 처음부터 읽곤했다. 요즘엔 인내심을 발휘해서 글이 조금 길더라도 그냥 처음부터 끝까지 정독하는데, 막상 시간을 재보면 정독하는데 그렇게 오래걸리지도 않고, 이해도 더 잘되고, 짧게 잘 요약된 글을 찾아헤매는 것보다 오히려 더 빠를 때도 있는 것 같..

Immutable String은 immutable하다. Immutable이란 변하지 않는다는 뜻이다. 예시를 들어보자. 위와 같이 "Hello"를 담고 있는 str이라는 변수에 "Hello world"를 대입해주면 어떤 일이 벌어질까? "Hello"가 있던 공간에 " world"를 추가하는 것이 아니라 "Hello world"라는 새로운 문자열을 갖게 된다. 정확히는 str이 "Hello"가 있는 메모리 공간을 가리키던 상황에서 "Hello world"가 있는 메모리 공간을 가리키게 된다. (만약 위의 상황에서 String str2 = "Hello world"; 라는 코드를 추가한다면 이때 str2와 str1은 같은 곳을 가리키게 된다. 참고: Java String literal과 new String()..

String literal vs new String() str1을 String literal이라 말한다. str1과 str2는 어떤 차이가 있을까. 위의 그림대로 문자열을 만들어보자 이때 s3와 s4는 같은 곳을 가리키고 있다. String literal은 같은 문자열인 경우 메모리 전체에서 하나만 존재함을 알 수 있다. 하지만 s1과 s2를 보면 같은 문자열임에도 s3, s4가 가리키는 곳과 다른 곳을 가리키고 있고, 심지어 s1과 s2끼리도 서로 다른 곳을 가리키고 있다. 즉, new 연산자를 통해서 String 객체를 만들면 문자열이 같아도 매번 다른 공간에 문자열이 생기는 것임을 알 수 있다. 테스트해보자. 동일성과 동등성 동일할 때와 동등할 때 모두 '같다'라는 단어를 사용할 수 있지만 그 뜻이..
참가 이유 알고리즘에 자신이 있었기 때문이라거나 상을 받고 싶었기 때문은 아니다. 대회를 위해 알고리즘을 더 열심히 공부하고, 대회에 나가 정말 잘하는 사람이 많다는 것을 직접 눈으로 보며 자극을 받는 것만으로 엄청난 플러스라고 생각해서 참가했다. 시작부터 삐그덕 ICPC는 3인 1팀이다. 내가 아는 사람 중에 참가하고 싶다는 사람이 한 명밖에 없었다. 예선대회 모집 마감 당일 마감 시간 30분 전에 지인에게 머릿수만 채워달라고 부탁하여 가까스로 참가했다. 예선 당일 예선은 줌으로 진행됐다. 온라인이지만 세 명이 모두 한 장소에 모여서 풀었어야 했는데 장소가 마땅치 않아 카페의 미팅룸에서 만났다. 13시 50분까지 줌에 들어갔어야 했는데 사소한 문제로 버벅거리다가 13시 49분쯤 간신히 들어갔다. 사람이..