hyundho12의 등록된 링크

 hyundho12로 등록된 네이버 블로그 포스트 수는 37건입니다.

SpringBoot Gmail SMTP 메일보내기 [내부링크]

Smtp properties 설정 spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username=[gmail 계정] spring.mail.password=[gmail 비밀번호] spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true 메일 전송 소스코드 to : 메일을 받을 주소 subject : 메일 제목 text : 메일 내용 import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; @Component public class EmailServiceImpl implements EmailService { @Autowired public JavaMailSender em

Controller [내부링크]

@Controller public class HomeController { private static final Logget Logger = LoggerFactory.getLogger(HomeController.class); @RequestMapping(value = "/home", method = RequestMethod.GET) public String home(Locale locale, Model model) { Logger.info("Welcome {}.", locale); // Business Logic Date date = new Date(); DateFormat = dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); // BL의 결과를 Model에 저장 model.addAttribut

DAO,DTO,Entity Class의 차이 [내부링크]

DAO(Data Access Object) 란? repository package 실제로 DB에 접근하는 객체이다. Persistence Layer(DB에 data를 CRUD하는 계층)이다. Service와 DB를 연결하는 고리의 역할을 한다. SQL을 사용하여 DB에 접근한 후 적절한 CRUD API를 제공한다. JPA 대부분의 기본적인 CRUD method를 제공하고 있다. extends JpaRepository<User,Long> public interface QuestionRepository extends CrudRepository<Question, Long> { } DTO(Data Transfer Object) 란? dto package 계층관 데이터 교환을 위한 객체(Java Beans)이다. DB에서 데이터를 얻어 Service나 Controller등으로 보낼때 사용하는 객체를 말한다. 즉, DB의 데이터가 Presentation Logic Tier로 넘어오게 될 떄는

Spring MVC WebForm [내부링크]

Request Paramter 의 종류 Request Paramter는 HTTP Request Message 안에 담겨서 보내진다. Request Parameter는 2가지 방식으로 전달된다. 1. GET방식 : Query String - url 뒤에 query string 형식으로 붙어서 보내진다. - 조회와 같이 DB를 변경하지 않는 작업에 이 방식을 사용한다. 2. POST 방식 : HTTP Entity Body - HTTP Request Message의 Body에 담겨서 보내진다. - 암호화, 회원가입(Password) 등 주로 DB를 변경하는 작업에 이 방식을 사용한다. Data Binding request parameters가 form bean에 바인딩되는 것을 말한다. 1. @RequestParam 어노테이션 @RequestParam 어노테이션 이용 method 인자에 request parameter을 binding 해준다. 반드시 query string의 key 이름이

Python Slicing 문자열 자르기 [내부링크]

Python Slicing이란? slicing, slice : 연속적인 객체들에 범위를 지정하여 선택된 객체들을 가져온는 방식이다. a 라는 연속적인 객체들의 자료구조(ex: list, tuple, String)가 있다고 가정을 했을 때 기본 형태는 아래와 같습니다. a[start:end:step] start : 슬라이싱을 시작할 시작위치입니다. end : 슬라이싱을 끝낼 위치로 end는 포함되지 않는다. step : 보폭이라고 하며 몇개씩 끊어서 가져올지와 방향을 정한다. 필수사항은 아니며 옵션이다. a[start:] a = ['a','b','c','d','e'] a[1:] ['b','c','d','e'] a[-3:] ['c','d','e'] a[:end] a = ['a','b','c','d','e'] a[:2] ['a','b'] a[:-1] ['a','b','c','d'] a[start:end] a = ['a','b','c','d','e'] a[2:4] ['c','d'] a[-4

DTO의 필요성 [내부링크]

1. DTO를 사용하지 않을 경우 엔티티의 변경에 의해 API 스펙이 변경이 될수가 있다. 엔티티와 API가 일대일 대응의 관계를 가진다면 엔티티에 수정이 일어날 때마다 API 스펙을 일일히 변경해줘야 한다. 또한 컴파일 에러로 이를 감지할 수 없기 때문에 에러 원인을 찾기가 어렵다. (DTO을 사용한다면 엔티티 과정에서 컴파일 에러가 발생되므로 엔티티의 변경사항을 반드시 파악할수 있다. DTO을 사용하지 않음. DTO을 사용함 DTO 생성 entity username으로 수정 requset.getName() -> requset.getUsername() 으로 수정 2. 하나의 엔티티에 대해서 여러개의 API가 존재 할수 있다. 각각의 API가 요구하는 엔티티에 모든정보를 넘겨준다면 필요없는 데이터까지 받긴 하지만 필요한것은 받았기 때문에 기능동작에는 문제가 없다. 하지만 패스워드같은 JSON 으로 함께 넘어가기 때문에 보안문제가 발생할 수 있다.

@PathVariable [내부링크]

@PathVariable 파라메터을 사용하면 아래와 같이 URL의 일부를 변수로 전달할수 있다. user/10 으로 접근한다면 age 메서드을 호출하고, user/홍길동 으로 접근한다면 name 메서드을 호출한다.

Java8 Stream (map,filter,sorted) 사용법 [내부링크]

기존에 자바 컬렉션이나 배열의 원소를 가공할때 for문, foreach 등으로 원소을 하나씩 뽑아 가공을 하였다면, Stream 을 이용해 깔끔하게 처리가 가능. map 은 요소들을 특정조건에 해당하는 값으로 변환해 줍니다. ArrayList<string> list = new ArrayList<>(Arrays.asList("Apple","Banana","Melon","Grape","Strawberry")) list.stream().map(s -> s.toUpperCase()).collect(Collectors.toList()); // APPLE,BANANA,MELON,GRAPE,STRAWBERRY filter 은 요소들을 조건에 따라 걸러내는 작업을 해준다 list.stream().filter(t->t.length()>5).collect(Collectors.toList()) // Banana, Strawberry sorted 은 요소들을 정렬해주는 작업을 해준다. list.strea

REST API 란? [내부링크]

Rest의 정의 Representational State Transfer 의 약자 이다 자원의 표현에 의한 상태전달이다 REST는 기본적으로 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할수 있는 아키텍처 스타일이다 REST 구성 요소 1. 자원(Resource) URL 모든 자원에 고유한 ID가 존재한다. ID는 '/classes/:class_id' 같은 HTTP URL 이다. 2. 행위 (Verb) HTTP Method HTTP 프로토콜의 Method를 사용한다. HTTP 프로토콜은 GET,POST,PUT,DELETE 같은 메서드을 제공한다. 3. 표현 (Representations) REST에서 하나의 자원은 JSON,XML, TEXT 등 여러형태의 표현으로 나타내어진다. JSON, XML을 통해 데이터을 주고 받는것이 일반적이다. REST API 설계 규칙 1. URL의 리소스명은 동사보다는 명사을 사용 - GET/members/1 2. URL

linux 명령어 pwd, ls, cd, su [내부링크]

pwd : 현재 디렉토리 경로을 알려준다. ls : 현재 위치에 있는 내용을 알려준다. DOS의 dir 명령과 비슷하다. cd : 디렉토리를 변경 cd / : root 디렉토리로 이동 cd ../ : 현재 디렉토리에서 바로 전 디렉토리로 이동 su : root 사용자로 변경한다. su username : 다른 유저로 변경한다.

mkdir,rmkdir,chmod [내부링크]

mkdir : 디렉토리 생성 mkdir [옵션] [생성할 디렉토리 이름] 옵션 mkdir -m 777 hello hello 디렉토리을 생성하면서 user,group,other 모두 읽기 쓰기, 실행이 가능하다. chmod 옵션 (reference) (operator) (modes) 파일 reference(대상): u : user (파일을 소유한 사용자) g : group (특정그룹 group에 소속된 사용자 ) o : other (user,group 의 멤버가 아닌 사용자) a : all (위의 셋을 포함하는 모든 사용자의 권한) operator : + : 해당권한을 추가한다. - : 해당 권한을 제거한다. = : 해당권한을 설정한대로 변경한다. modes : r : read (읽기) w : write (쓰기) x : excute (실행) 예제 : chmod ug+rw sample : sample 파일의 user나 group 멤버들에게 읽기, 쓰기, 권한을 추가 chmod u

vi/vim 단축기 정리 [내부링크]

명령어 모드에서 입력모드로 전환 명령어 기능 a 커서 뒤(오른쪽)에 입력 A 행 마지막 부분에 입력 i 커서 앞(왼쪽)에 입력 I 행 처음 부분에 입력 o(소문자) 커서 밑에 빈 행을 추가하여 입력 O(대문자) 커서 위에 빈 행을 추가하여 입력 s 커서에 있는 글자를 지우고 입력 입력 모드에서 명령어 모드로 전환 ESC 키를 누른다. 저장,종료하기 명령어 기능 :q 종료한다. :q! 저장하지 않고 그냥 강제로 종료한다. :w 저장한다. :wq 저장하고 종료한다. zz 저장하고 종료한다(:wq와 동일) :wq 파일 이름 저장할때 파일이름을 지정할수 있다. 되돌리기,다시 실행 명령어 기능 u 이전으로 되돌리기(Undo) Ctrl + r 되돌리기한 것을 다시 실행하기(Redo)

CascadeType [내부링크]

Cascading이란? - Entity 관계는 종종 다른 Entity 존재에 의존한다. ex) Person - Address 관계이다. Person이 없다면, Address Entity는 존재의미가 없다. 우리가 사람 엔티티을 삭제할때 주소 엔티티 도 같이 삭제된다. Cascading이란 이를 달성하는 방법이다. 대상 엔티티에 대해 일부 작업을 수행하면 연결된 엔티티에 동일한 작업이 적용된다. CascadeType.ALL -모든 Cascade에 적용 @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; @OneToMany(mappedBy = "person", cascade = CascadeType.ALL) private List<Address> addresses; @Entity public class Address { @Id

Spring Security UserDetails, UserDeatilsService란? [내부링크]

1.UserDetails Spring Security에서 사용자의 정보를 담는 인터페이스는 UserDetails 인터페이스이다. 우리가 이 인터페이스를 구현하게 되면 Spring Security에서 구현한 클래스를 사용자 정보로 인식하고 인증 정보로 인식하고 인증 작업을 한다. 메소드 리턴타입 설명 기본값 getAuthorities() Collection<? extends GrantedAuthority> 계정의 권한 목록을 리턴 getPassword() String 계정의 비밀번호를 리턴 getUsername() String 계정의 고유한 값을 리턴 ( ex : DB PK값, 중복이 없는 이메일 값 ) isAccountNonExpired() boolean 계정의 만료 여부 리턴 true ( 만료 안됨 ) isAccountNonLocked() boolean 계정의 잠김 여부 리턴 true ( 잠기지 않음 ) isCredentialsNonExpired() boolean 비밀번호 만료 여

세션과 쿠키의 차이 [내부링크]

쿠키(cookie) - 사용자가 어떠한 웹사이트을 방문할 경우, 서버에서 사용자의 컴퓨터에 저장하는 작은 기록정보 파일이다. - 필요시 정보를 참조하거나 재사용할수 있다. 세션(Session) - 일정시간동안 사용자가 웹브라우저에를 통해 웹서버에 접속한 시점으로부터 웹브라우저을 종료하여 연결을 끝내는 시점 - 방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라고 한다. - 각 클라이언트마다 고유한 Session ID을 부여한다. Session ID 로 클라이언트 구분이 가능하다. - Session DB에 모든 session ID 값을 저장한다.

1764번 듣보잡 [내부링크]

1764번: 듣보잡 1764번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 듣보잡 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 37968 15715 11600 40.050% 문제 김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. ... www.acmicpc.net n,m = map(int,input().split()) a = [] b = [] ans = [] for _ in range(n): a.append(input()) for _ in range(m): b.append(input()) ans = sorted(list(set(a) & set(b))) print

Python set() [내부링크]

집합 set()은 순서 X, 중복 X, 추가 O, 제거 O 인 특징이 있습니다. 집합의 연산 - 집합이라는 개념에 맞게, 합집합,교집합, 차집합이 가능하다. 1. 교집합 a = set([1,2,3,4]) b = set([3,4,5,6]) print(a.intersection(b)) // {3,4} print(a & b) // {3,4} 2. 합집합 a = set([1,2,3,4]) b = set([3,4,5,6]) print(a.union(b)) // {1,2,3,4,5,6} print(a | b) // {1,2,3,4,5,6} 3. 차집합 a = set([1,2,3,4]) b = set([3,4,5,6]) print(a.difference(b)) // {1,2} print(a - b) // {1,2} - 플러스나, 곱하기, 연산자는 사용이 안됨 ... 원소의 추가 - 추가는 집합이름.add(원소) 이다. // list는 append()와 차이를 가진다. a = set([1,2,3,

카펫 [내부링크]

문제 설명 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다. 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다. 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다. 입출력 예 brown yellow return 10 2 [4, 3] 8 1 [3, 3] 24 24 [8, 6] def solution(brown, yellow): answer

[스프링부트] invalid source release: 11&& Reason: Failed to determine a suitable driver class 오류 [내부링크]

start.spring.io 에서 자바 버젼을 11로 하고 배포툴을 gradle 설정후 로컬에 셋팅 후 실행시 발생 원인 gradle의 jvm 설정이 11이하 버젼인데 bulid.gradle에 sourceCapatibility 설정이 11로 설정되어있어서 발생 해결 1. Setting 수정 1-1 Build,Execution,Deployment -> Jre : 11 2. Project Structure 수정 2-1 project Project SDK : 11로 수정 2-2 SDKs JDK home path 11로 수정 Reason: Failed to determine a suitable driver class 1 원인 - 데이터베이스을 사용하기 위한 dependency가 존재하는 경우 @SpringBootApplication에서 자동으로 데이터베이스 값을 설정하려고 시도하지만 사용자는 데이터베이스 값을 입력을 안했기에 발생하는 에러입니다. 2 해결방안 2- 1 DataSourceAu

@RunWith(SpringRunner.class), @SpringBootTest [내부링크]

Junit4에서 단위테스트을 할때 사용된다. @RunWith(SpringRunner.class) 사용하는 이유? - @RunWith(SpringRunner.class)를 사용한다면, @Autowired, @MockBean에 해당되는 것들에만 application context를 로딩하게되므로 Junit4에서는 필요한 조건에 맞춰서 @Runwith(SpringRunner.class)를 사용합니다. - Junit5에서는 ExtendWith(MyExtension.class)을 사용해야한다. RunWith을 지원하지않음. @SpringBootTest - 통합 테스트를 위해 전체 애플리케이션 Context를 로드하는데 사용된다. - @SpringbootTest 주석은 전체 컨테이너를 부트스트랩해야 할때 사용할 수 있다. 주석은 테스트에서 활용될 ApplicationContext를 생성하여 작동합니다.

정적 팩토리 메서드 [내부링크]

정적 팩토리 메서드 (Static Factory Method) 란? - 객체 생성의 역할을 하는 클래스 메서드 이다. 생성자을 통해 객체를 생성하는 것이 아닌 메서드를 통해 객체을 생성하는것이다. 생성자 대신 정적 팩토리 메서드을 사용하는 이유는 ? 1. 생성자와 달리 자기 이름을 가질 수 있다. 2. 생성자와 달리 호출될 때마다 매번 새로운 객체를 생성할 필요가 없다. 3. 하위 자료형 객체를 반환활수 있다. 4. 객체 생성을 캡슐화할 수있다.

자바 가변인자 ... [내부링크]

매개변수의 개수를 동적으로 지정해 줄 수 있게 되었는데 이 기능을 가변인자(variable argument)라고 한다. 가변인자 사용법 키워드 ... 을 사용한다. void sum(String... str){ for(String a:str){ System.out.println(a); } } 타입... 변수명으로 사용한다. 가변인자 사용시 주의사항 1. 가변인자는 여러개 사용될수 없다. 그리고 가변인자는 항상 파라미터 마지막에 있어야 한다. 2. 가변인자를 사용하게 되면 인자를 넣지 않아도 정상적으로 실행된다.

JPA 양방향 연관관계 [내부링크]

https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/07_jpa_relational2.PNG?raw=true - Team을 통해서도 getMemberList()로 특정 팀에 속한 멤버 리스트를 가져오고 싶다. - DB는 단방향 매핑때와 변화가 없다. 둘을 Join 을 하면 되기때문이다. DB는 방향이 없다. @Entity public class Member{ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; private int age; @ManyToOne @JoinColumn(name = "Team_ID") private Team team; } @Entity public class Team{ @Id @GeneratedValue @Column(name = "TEAM_I

리다이렉트 (Redirect) [내부링크]

HTTP Redirect란? 리다이렉트란 Re(다시) direct(지시하다) 다시 지시하는 것이다. 예를들어 브라우저가 www.test1.com URL을 웹 서버에 요청했을때, 서버는 HTTP 응답메세지을 통해 www.test2.com 으로 다시 요청하라고 브라우저에게 다른 URL(길, 방향)을 지시 한다. Redirect 필요한 경우 - 기존의 페이지의 주소가 새롭게 변경된 경우 - 불필요하거나 잘못된 서브주소을 하나로 이동시키는 경우 - 로그인,인증 등의 목적으로 다른 주소로 이동이 필요한 경우 301,302 Redirect차이 - 301 Redirect : 영구적인 방법으로 Redirect로 서버사이드 방법의 이동 - 302 Redirect : 일시적인 방법으로 Redirect로 스크립트나 html태그을 이용한 방법

변경감지 와 병합(merge) [내부링크]

준영속 엔티티? - 영속성 컨텍스트가 더는 관리하지 않는 엔티티을 말한다. 준영속 엔티티을 수정하는 2가지 방법 - 변경감지 기능사용 - 병합(merge) 사용 변경감지 기능사용 트랜잭션 안에서 엔티티을 다시 조회,변경할 값 선택 -> 트랜잭션 커밋 시점에 변경감지(Dirty Checking)이 동작해서 데이터베이스에 UPDATE SQL 실행 병합사용 책 자바 ORM 표준 JPA 프로그래밍 병합 동작 방식 1. merge()를 실행한다. 2. 파라미터로 넘어온 준영속 엔티티의 식별자 값으로 1차 캐시에서 엔티티을 조회한다. 2-1 만약 1차 캐시에 엔티티가 없다면 데이터베이스에서 엔티티을 조회하고 1차캐시에 저장한다. 3. 조회한 영속 엔티티(mergeMember)에 member 엔티티 값을 채워 넣는다. (member 엔티티의 모든 값을 mergeMember에 밀어 넣는다. 이때 mergeMember의 회원1 이라는 이름이 "회원명변경"으로 바뀐다) 4. 영속 상태인 mergeMe

Stack, Queue, Heap의 구조와 메모리 영역 [내부링크]

Stack stack은 LIFO(Last in First Out) 구조다. 제일 처음 들어간 데이터는 제일 마지막에 나온다. Queue queue는 FIFO(First in First Out) 구조다. 데이터가 들어간 순서대로 나온다. Heap Heap은 완전 이진트리 형식이다. 위에서 아래로 왼쪽에서 오른쪽으로 데이터가 채워진다. Heap은 부모노드가 자식 노드보다 무조건 큰 완전이진트리 최대 힙, 부모노드가 자식 노드보다 무조건 작은 완전이진트리로 최소 힙으로 구분된다. Code Area - 프로그래머가 작성한 코드가 실행되는 영역이다. Data Area - 전역변수가 정적(Static)변수가 저장되는 영역이다. 프로그램이 시작되면 할당되며 프로그램이 종료되면 소멸한다. Heap Area - 사용자가 직접관리하는 메모리 영역으로, 동적 메모리 영역이라고 불린다. 낮은주소에서 높은 주소로 할당되는 것이 특징이다. 이 영역은 사용자가 직접 메모리를 할당하고 해재해 주어야 하는 불편함

Python startswith() 사용법 [내부링크]

string = "hello world!"; print(string.startswith(hello)); True 값 반환 string = "hello world!"; print(string.startswith(Hello)); False 값 반환 - 대소문자을 구분하고 True, False로 값을 반환. String1.startswith(String2) // String2가 String1의 접두어인지를 찾아주는 기본함수이다.

Pyhon Array[::] 사용법 [내부링크]

arr[::], arr[1:2:3] arr[-1] 등으로 배열의 index에 접근하는 것을 Extended Slices라고 부릅니다. arr[A:B:C] 는 index A 부터 index B 까지 C의 간격으로 배열을 만들어라는 말입니다. 만약 A가 None 이라면 처음부터 라는 뜻이고, B가 None이라면, 할수 있는데까지 C가 None 이라면 한 칸 간격으로 라는 뜻입니다. arr = [0,1,2,3,4,5,6,7,8,9] arr[::2] 처음부터 끝까지 두칸 간격으로 [0,2,4,6,8] arr[1::2] index 1부터 끝까지 두 칸 간격으로 [1,3,5,7,9] arr[::-1] 처음부터 끝까지 -1칸 간격으로(역순으로) [9,8,7,6,5,4,3,2,1,0] arr[::-2] 처음부터 끝까지 -2칸 간격으로(역순, 두칸간격으로) [9,7,5,3,1] arr[3::-1] index 3부터 끝까지 -1칸 간격으로(역순으로) arr[1:6:2] index 1부터 6까지 두칸

전화번호 목록 [내부링크]

1. 문제 설명 (출처 : 프로그래머스, 원 출처) 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입출력 예 phone_book return ["119", "97674223", "1195524421"] false ["123","456","789"] true

Python 문자열 정렬에 대하여 [내부링크]

파일 이름이 포함된 문자열 목록이 있다. flist = ['0.png','10.png', '3.png', '4.png', '100.png'] flist.sort() print(flist) 결과 ['0.png', '10.png', '100.png', '3.png', '4.png'] 문자열은 정렬을 할때 사전 순으로 정렬이 된다. 그러므로 "10"이 "3" 보다 앞에 온다. 아래와 같이 실행하면 flist.sort(key=lambda fname: int(fname.split('.')[0])) - 오름차순으로 정렬된다. ['0.png', '3.png', '4.png', '10.png', '100.png'] https://stackoverflow.com/questions/52737587/sorting-a-list-of-strings-numerically Sorting a list of strings numerically I have a list of strings with my filena

Python 내장함수 zip [내부링크]

두 그룹의 데이터를 서로 엮어주는 파이썬의 내장함수 zip()에 대해서 알아보자. zip zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 터플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환합니다 >>> numbers = [1, 2, 3] >>> letters = ["A", "B", "C"] >>> for pair in zip(numbers, letters): ... print(pair) ... (1, 'A') (2, 'B') (3, 'C') zip() 함수를 활용하면 여러그룹 데이터을 루프을 한번만 돌면서 처리가 가능. 아래에서 3개의 문자열내의 글자을 하나씩 병렬해서 출력하고 있습니다. >>> for number, upper, lower in zip("12345", "ABCDE", "abcde"): ... print(number, upper, lower) ... 1 A a 2 B b 3 C c 4 D d

Java 클래스, 객체, 인스턴스의 차이 [내부링크]

클래스, 객체, 인스턴스의 개념 클래스(Class)란 - 객체을 만들어내기 위한 설계도 혹은 틀 - 연관되어 있는 변수와 메서드의 집합 객체란 - 구현할 대상 - 클래스에 선언된 모양 그대로 생성된 실체 인스턴스(Instance)란 - 설계도을 바탕으로 구현된 구체적인 실체 - 객체을 실체화하면 그것을 인스턴스라고 부른다. - 실체화된 인스턴스는 메모리에 할당된다. public class Animal{ // 클래스 ... } public class Main{ public static void main(String[] args){ Animal cat, dog; // 객체 //인스턴스화 lion = new Animal(); // lion은 Animal 클래스의 인스턴스(객체을 메모리에 할당) tiger = new Animal(); } }

Framework vs Library [내부링크]

프레임워크 (Framework)란 - 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하도록 일련의 협업화된 형태로 클래스들을 제공하는 것 - 랄프 존슨- 프레임워크 vs 라이브러리 프레임워크란 - 프로그램의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하도록 협업화된 형태로 제공하는 소프트웨어이다. ex) 자동차 프레임, 기본적으로 구성하고 있는 뼈대 라이브러리란 - 개발자가 개발하는데 필요로한 도구들을 나열해놓은것으로 필요할때 호출가능, 미리 작성한 코드, 함수, 클래스등이 포함. ex) 자동차의 기능하는 부품

Java == equals() 차이 [내부링크]

== 항등 연산자 이다. 두 객체가 같은 메모리 공간을 가리키는지 확인한다. 같은 주소면 return true, return false equals() 객체 비교 메서드(Method)이다. 두 객체의 값이 같은지 확인한다. 문자열 데이터/내용을 기반으로 비교한다. public class Test { public static void main(String[] args) { String s1 = new String("Hello world"); String s2 = new String("Hello world"); Thread s3 = s1; // 같은 대상을 가리킨다. String s4 = new String("java"); /* --print-- */ System.out.println(s1.equals(s2)); // true System.out.println(s1.equals(s3)); // true System.out.println(s3.equals(s4)); // false } }

Web Server vs WAS(Web Application Server)의 차이 [내부링크]

Static Pages와 Dynamic Pages 1. Static Pages Web Server는 파일 경로 이름을 받아 경로와 일치하는 file contents를 반환한다. 항상 동일한 페이지를 반환한다. Ex) image,html, css, javascript 파일과 같이 컴퓨터에 저장되어 있는 파일들 2. Dynamic Pages 인자의 내용에 맞게 동적인 contents를 반환한다. 즉, 웹 서버에 의해서 실행되는 프로그램을 통해서 만들어진 결과물 Servlet : WAS 위에서 돌아가는 Java Program 개발자는 Servlet에 doGet()을 구현한다. Web Server Web Server의 개념 소프트웨어와 하드웨어로 구분된다. 1) 하드웨어 - Web 서버가 설치되어 있는 컴퓨터 2) 소프트웨어 - 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를(.html .css .jpeg) 제공하는 컴퓨터 프로그램 Web Server의 기능 HTTP 프로

JPA mappedBy 사용법 [내부링크]

mappedBy 옵션은 객체관 양방향 연관관계일때 사용한다. 연관관계의 주인은 mappedBy을 사용하지 않고 반대쪽 객체에서 사용한다. @Entity @Table(name="team") public class Team { @Id @Column(name="team_id") private long id; @OneToMany(mappedBy="team") private List<Member> members; } @Entity @Table(name="member") public class Member { @Id @Column(name="member_id") private long id; @ManyToOne @JoinColumn(name="team_id") private Team team; } Owner 그럼 주인은 어떻게 정하는 좋은 방법은?? 1. FK가 있는 곳을 주인으로 한다. 2. 설계는 단방향으로 하되, 반대로 접근이 필요해진 곳에 양방향을 추가하는 식으로 코드를 작성한다.

Spring Data JPA 연관관계 편의 메서드 [내부링크]

연관관계 편의 메서드 양방향 연관관계를 맺을 때에는, 양쪽 모두 관계를 맺어주어야 한다. 사실 JPA 입장에서는 외래키관리자(연관관계의 주인)쪽에만 관계를 맺어준다면 정상적으로 조회가 가능하다. Team team1 = new Team("Team1", "pookyTeam"); em.persist(team1); Member member1 = new Member("Member1","pooky"); member1.setTeam(team1); // 연관관계 설정 member1 -> team1 Team team1 = new Team("Team1", "pookyTeam"); em.persist(team1); Member member1 = new Member("Member1","pooky"); member1.setTeam(team1); // 연관관계 설정 member1 -> team1 team1.getMembers().add(member1) // 연관과녜 설정 team1 -> member1 pub