목록분류 전체보기 (138)
DOing
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c1wPlv/btq4o7oLBOG/ijo9gjnYWiBh96RI763R00/img.png)
이전 포스팅에서는 대표적인 빌드 도구로 꼽히는 Ant, Maven, Gradle을 비교해보았다. 오늘은 이 중에서 Maven에 대하여 더 자세히 다뤄보겠다. Spring 프로젝트를 하면서 당연하게 생각하고 있었는데 이번 기회에 Maven에 대해 자세히 알고 사용하면 좋을 것같다. 💡 Maven? 자바용 프로젝트 관리도구 Apache에서 Ant의 대안으로 개발하였다. 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함한다. 모든 빌드 단위에 대한 라이프 사이클이 예약되어있어 개발자가 임의로 변경할 수 없다. 의존성을 설정하여 라이브러리 자동 관리 pom.xml에 라이브러리를 정의해놓으면 자동 관리해준다. 💡 Maven 라이프 사이클 Maven에서는 default lifecyc..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c8axv0/btq4ref1A2Y/mrDkvny22KJ5EtEizkJwek/img.png)
💡 빌드? Build는 작성된 코드를 실제 기기에서 실행 될 수 있는 소프트웨어로 변환하기 위한 과정을 말한다. 보통 컴파일을 포함한 배포하기 직전까지의 모든 과정을 ‘빌드 한다’ 라고 표현한다. 실제로 회사나 프로젝트 팀마다 용어를 조금씩 다르게 사용하는 경우가 있으니 참고해두는 것이 좋다고 한다. 심지어는 코드가 완성된 직후, 컴파일부터 배포하는 모든 과정을 ‘빌드 한다’고 표현하는 경우도 있다고 한다. 💡 빌드 도구? 작은 프로젝트라면 개발자가 수동으로 라이브러리 의존성을 추가해주고 빌드 할 수 있을 것이다. 하지만 프로젝트가 커진다면 많아진 라이브러리를 직접 추가하여 빌드하는 일은 번거로움이 따른다. 심지어 코드 수정을 할때마다 이와 같은 과정을 반복하게된다면 굉장히 비효율적이며 실수를 유발하기 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bCNAXw/btq4oRfky6K/xF798JYyAVxGdkq2wkBHlK/img.png)
최근에 AWS를 이용해서 총 두개의 프로젝트를 배포해보게 되었습니다. 그에 대한 회고를 해보려고 합니다. [ 계기 ] 꽤 오랫동안 진행해왔던 Spring 프로젝트를 마무리 지어가고 있었습니다. 워낙 많은 시간과 노력을 투자해서인지 애착이 크게 느껴졌는데 이 프로젝트가 내 컴퓨터에서만 동작할 수 있다는게 아쉽게 느껴졌습니다. 물론 배포를 하고 싶긴했지만, "만약 실제로 배포를 한다면 이미지는 어떻게 저장하지?? DB는 어떻게 연동해야하지??? 그럼 코드를 여기서 건드려야하는건가??"라는 두려움이 있었습니다. 하지만 실제 회사들에서도 AWS를 사용하고 있고 점점 증가하는 추세라는 말을 들으며, 이번 기회에 한번 AWS를 이용하여 배포에 도전해보자라는 결심을 했습니다. [ 학습 과정 ] 1. Spring Bo..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/blT8LI/btq3UHpbyMW/g8U5juMlUL8XeTJtvJAlHk/img.png)
Github Repository에 코드를 올리게 되면 자동으로 파일을 분석하여 언어별 비율을 알려준다. 근데 이때 리포지토리의 언어가 인식이 안되는 경우가 있다. 이와 관련된 liguist의 이슈가 있다. github.com/github/linguist/issues/542 Failed to detect language used in a repository. · Issue #542 · github/linguist I have a repository called node-timezone. It is primarily written in Javascript. But Linguist library failed to detect my repository is written in which language. It ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/3VuIA/btq3UHo7HoM/DcPbILdxsOmsKgkokn0wrK/img.png)
Github Repository에 코드를 올리게 되면 자동으로 파일을 분석하여 언어별 비율을 알려준다. 이때 언어비율에 미치는 것은 파일의 갯수가 아닌 파일의 크기다. 즉, 큰 서브 코드 파일이 올라게되면서 자신의 주 코드 비율이 밀려날 수 있다. 예를 들면 나의 경우에는 웹 프로젝트를 만들었고, 자바 백엔드에 초점을 맞췄지만 애꿎은 html파일이 크게 잡혔다. 이때 Linguist를 사용해서 Github repository의 언어를 바꿀 수 있다. Linguist란 GitHub의 언어 사용 통계를 위한 오픈소스 라이브러리이다. .gitattributes 파일을 만들어서 Linguist 설정을 바꿔주면 된다. 1. 리포지토리에서 새 파일 생성 2. .gitattributes 파일 생성 3. .gitatt..
이전 포스팅에서는 DB에 있는 유저 정보를 쿼리를 이용해서 인증했다. 이번 포스팅에는 UserDetailsService를 이용하여 인증해보자. UserDetailsService는 원하는 객체를 인증과 권한 체크에 활용할 수 있다. 1. 회원 도메인 생성 회원은 여러개의 권한을 가질 수 있는 구조로 설계하였다. @Data public class MemberVO { private String userid; private String userpw; private String userName; private boolean enabled; private Date regDate; private Date updateDate; private List authList; } © 2021 GitHub, Inc. 2. 권한 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/NBNbi/btq3JfGdgd0/K6QmAql6YW9HjNCUZBaE41/img.png)
이전 포스팅에서는 특정한 계정에 대해서 로그인 처리를 하였다. 이번 포스팅에서는 좀 더 현실적으로 DB를 이용하는 방식을 이용해보자. 1. root-context.xml 확인 dataSource라는 빈이 제대로 지정되어 있는 확인한다. 2. 테이블 생성 3. security-context.xml 수정 4. PasswordEncoder 스프링 시큐리티 5부터는 PasswordEncoder를 지정해야한다. 이전 포스팅에서는 임시로 {noop}을 사용해서 진행했지만 데이터 베이스를 이용하는 경우에는 PasswordEncoder를 사용해야 한다. PasswordEncoder는 패스워드를 암호화 시킨다. 암호화되지 않은 실제 패스워드를 저장하거나 사용하는 일은 위험하다. 때문에 암호화된 패스워드로 저장하고, 사용..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b1ivwM/btq3zNDedsA/NhPn0kn9ihU6jXDkb5rQy1/img.png)
파이썬의 자료형에는 대표적으로 List, Tuple, Dictionary, Set이 있다. 자주 헷갈리기때문에 이번 포스팅을 통해 정리하려고 한다. 추가로 List, Tuple, Dictionary, Set, String 자료형모두 not in, in연산자는 모두 가능하다 💡 List : 순서가 존재한다. (인덱싱 가능) 형태 : a = [1, 2, 3, 4, 5] 1. 선언 a = [] b = list() 2. 초기화 a = [0]*10 # list comprehension b = [i for i in range(20) if i% 2 == 1] 특히 2차원 배열의 초기화는 list comprehension을 이용해야한다. 만약 1차원 리스트처럼 초기화한다면 다음과 같은 결과가 나온다. a[1][1]만 ..