분류 전체보기89 script 태그, 널 어디에 둬야하니?! 웹 개발을 해보신 분들이라면 한번 쯤은 HTML 내 1번의 경우와는 다르게, body 태그 최하단에 위치하게 되면 HTML 파싱을 마친 후 script 태그를 읽기 때문에 상대적으로 HTML 컨텐츠를 빠르게 화면에 보여줄 수 있습니다. HTML 파싱 시작 HTML 파싱 완료 script 다운로드 및 실행 그러나 여기에 위치하는 것도 단점이 있습니다. 만약 이 웹 페이지를 이용하는 데 있어 사용자가 JS 없이는 아무것도 할 수 없는 경우에는 화면에 컨텐츠가 다 보여진데도 큰 의미가 없을 수 있습니다. 3. async (head 태그 내 위치) script 다운로드와 HTML 파싱을 동시에 위 이미지를 통해 알 수 있듯이, async 속성을 사용하게 되면 HTML 파싱 중 script 태그를 만나더라도 파싱.. 2022. 8. 15. @Transactional 스프링에서는 @Transactional을 통해 트랜잭션을 관리할 수 있게 해줍니다. @Transactional의 propagation 옵션 값을 지정함으로써 트랜잭션 전파 레벨을 설정할 수 있는데요, 해당 옵션에서 지원하는 트랜잭션 전파 레벨에는 무엇이 있고, 각 전파 레벨은 어떻게 트랜잭션을 진행하는지 알아보겠습니다! 📌 @Transactional @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Transactional { ... Propagation propagation() default Propagation.REQUIRED; .. 2022. 8. 11. Spring Boot JPA Table 생성 오류 오늘의 Trouble AWS EC2에서 애플리케이션을 실행 시 drop, create table이 정상적으로 실행되지 않는 문제 발생. 원인 및 해결 로컬에서는 h2를 사용하고 있으며, AWS EC2에서는 mysql을 사용하고 있다. h2와 mysql의 예약어가 달라서 발생한 문제였다. option, desc 등 변수명을 구체화함으로써 예약어를 피할 수 있게 조치를 취했다. 2022. 6. 20. Collections Framework (6) HashMap, TreeMap HashMap - Map을 구현한 클래스로, 키와 값을 묶어 하나의 데이터(entry)로 저장한다. - 해싱을 이용해 많은 양의 데이터를 검색하는 데 있어 뛰어나다. Hashing & Hash Function [해싱] : 해시 함수를 이용해 데이터를 해시테이블에 저장하고 검색하는 기법이다. [해시 함수] : 데이터가 저장되어 있는 위치를 알려준다. 해싱을 사용하는 자료구조는 배열과 LinkedList의 조합으로 이루어져 있다. 데이터를 저장하는 과정은 다음과 같다. 1. 저장할 데이터의 키를 해시 함수에 넣으면 배열의 한 요소를 얻게 된다. 2. 해당 요소에 연결되어 있는 LinkedList에 데이터를 저장한다. 데이터를 검색하는 과정은 다음과 같다. 1. 검색하고자 하는 value의 key로 해시 함수.. 2022. 2. 21. Collections Framework (5) HashSet, TreeSet HashSet Set 인터페이스를 구현한 대표 컬렉션으로 요소를 중복해서 저장할 수 없고, 저장 순서를 유지하지 않는다. 저장 순서를 유지하고자 한다면, LinkedHashSet를 사용하면 된다. HashSet(int initalCapacity, float loadFactor) 위 생성자는 초기용량과 load factor를 지정하는 생성자인데, load factor란 컬렉션 클래스에 저장공간이 가득 차기 전에 미리 용량을 확보하기 위한 역할을 한다. 기본 값은 0.75로, 저장 공간의 75%가 채워졌을 때 용량이 두 배로 늘어난다. add 메서드는 새로운 요소를 추가하기 전에 이미 저장되어 있는 요소와 같은 것인지를 판별하기 위해 추가하려는 요소의 equals()와 hashCode()를 호출한다. 따라.. 2022. 2. 21. Collections Framework (4) Comparator, Comparable Comparator, Comparable 이 둘은 모두 인터페이스로, 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. Arrays.sort()를 통해서 정렬이 가능한 클래스들의 경우 모두 Comparable 인터페이스를 구현하고 있다. 대표적으로 Wrapper 클래스들과 String, Date, File과 같은 클래스들이 있다. public interface Comparator { int compare(Object o1, Object o2); } public interface Comparable { int compareTo(Object o); } compareTo()의 경우 비교하는 두 객체가 같으면 0, 비교하는 값보다 작으면 음수, 크면 양수를 반환하도록 구현해야 한다. compare()의 경우.. 2022. 2. 17. Collections Framework (3) Arrays Arrays 말 그대로 배열을 다루는 데 유용한 메서드들을 정의해놓은 클래스이다. sort(), binarySearch() sort()는 배열을 정렬할 때 사용되고, binarySearch()는 요소를 검색할 때 사용되는 메서드이다. 이진 탐색의 경우 배열이 우선적으로 정렬이 되어있어야 사용할 수 있다. asList(Object... ary) 배열을 List에 담아서 반환하는 메서드이다. 전달인자의 타입이 가변인수라서 배열을 생성하지 않고 요소들만 나열해 사용할 수 있다. List list = Arrays.asList("hello", "world"); 단, asList()를 통해 반환된 List는 크기를 변경할 수 없다. 따라서 추가 또는 삭제가 불가능하다. (변경은 가능) 크기를 변경할 수 있는 Li.. 2022. 2. 16. Collections Framework (2) Iterator, ListIterator, Enumeration Iterator 컬렉션에 저장된 각 요소에 접근할 수 있는 기능을 제공하는 인터페이스이다. Collection 인터페이스에는 Iterator를 반환하는 iterator() 메서드를 정의하고 있다. List와 Set은 Collection의 자손 클래스이므로 각 컬렉션의 특징에 알맞게 iterator()가 정의되어 있다. Map인터페이스를 구현한 클래스들의 경우 key와 value가 쌍으로 저장되기 때문에 keySet(), entrySet()과 같은 메서드를 통해 key와 value를 따로 Set의 형태로 반환 받은 후에 iterator()를 사용한다. public Interface Iterator { boolean hasNext(); Object next(); void remove(); } 정의되어 있는.. 2022. 2. 15. TCP TCP 1. 장치들 사이에 논리적인 접속을 성립하기 위한 연결을 설정해 신뢰성을 보장하는 연결형 서비스이다. 2. 데이터 순서를 보장한다. - 서버에서 패킷 순서가 잘못 도착한 경우, 잘못된 순서부터 다시 보내라고 요청 3. 3 way handshaking 과정을 통해 연결 설정, 4 way handshaking을 통해 연결 해제 3 way handshaking - TCP 통신을 이용해 데이터를 전송하기 위해 네트워크 연결을 하는 과정이다. - 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽에 준비되었다는 것을 알 수 있도록 하는 것이다. - 과정 1. A -> B (SYN): 접속 요청 프로세스 A가 연결 요청 메시지를 전송한다. 2. B.. 2022. 2. 10. 이전 1 2 3 4 ··· 10 다음