묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
flutter secure storage에 대하여
혹시 이 패키지는 단순히 토큰이나 보안 관련된 부분을 저장하기 위해 만들어진 패키지인가요?이전에 hive와 sql보다는 사용법이 조금 단순한 것 같아서 이 패키지를 이용하면 복잡하지 않은 가벼운 데이터 정도는 쉽게 저장할 수 있을 것 같아서 여쭤봅니다..!
-
해결됨Practical Testing: 실용적인 테스트 가이드
MailService 구조에 대해 생각을 여쭙고 싶습니다.
안녕하세요 강사님, 먼저 좋은 강의와 강의가 나온지 일년이 가까지 되어가는데도 답변해주셔서 감사합니다. public boolean sendOrderStatisticsMail(LocalDate orderDate, String email) { // 찾아오기 //통계 합산하기. boolean result = mailService.sendMail(); return true; } public Boolean sendMail(String fromEmail, String toEmail, String subject, String content) { // mailSendClient는 메일을 전송하는 역할을 합니다. boolean result = mailSendClient.sendEmail(fromEmail,toEmail,subject,content); // 메일이 전송되었다면 메일 전송 내역을 저장합니다. - 기록용 엔티티 입니다. if (result) { mailSendHistoryRepository.save(..); return true; } return false; }이렇게 역할을 나누어 메일 전송을 메일 서비스에게 위임했습니다. 조회한다메일을 전송한다메일 히스토리에 저장한다.비즈니스 로직을 그대로 작성하다보면 아래와 같이 작성하게 되는 경우가 많습니다.public boolean sendOrderStatisticsMail(LocalDate orderDate, String email) { // 찾아오기 //통계 합산하기. // mailSendClient는 메일을 전송하는 역할을 합니다. boolean result = mailSendClient.sendEmail(fromEmail,toEmail,subject,content); // 메일이 전송되었다면 메일 전송 내역을 저장합니다. - 기록용 엔티티 입니다. if (result) { mailSendHistoryRepository.save(..); return true; } return false; }mailSendClient를 Subbing해서 테스트를 한다면위에 코드나 아래 코드나 테스트 방식은 동일하게 작성이 됩니다. 강사님께서 작성하는 방법은 메일 후처리를 해주는 클래스를 추가가 됩니다.테스트 코드를 작성하면 동일하게 동작하는데 클래스가 하나가 추가됩니다. 그럼에도 장점이 있기 때문에 사용한다고 생각되어지는데제가 생각한 후처리기 클래스의 장점은외부 네트워크를 직접 의존하지 않아도 된다.메일 전송과 히스토리 저장을 하나의 서비스로 사용할 수 있다. 그리고 이렇게 후처리기 클래스 적용하는 기준이 있으실까요?
-
해결됨[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
체크/라디오박스 등 라벨이 2줄이상 적용될 때는 어떻게 해야하나요?
보통 체크박스와 라벨의 오토레이아웃을 Align Left로 설정하게 되는데,2줄 이상의 텍스트가 필요할때는 어떻게 제작하시나요?디자인시스템에 1줄일 경우, 2줄이상일 경우를 따로 등록하시는지,아니면 다른방법을 쓰시는지 궁금합니다.추가 질문)저는 간간히 2줄 이상일 경우에는 컴포넌트 전체의 오토레이아웃을 Align top left를 한다음,체크박스에 한번 더 오토레이아웃을 설정하고 위아래에 (텍스트 박스와의 시각보정을 고려한) 여백을 설정해서하나의 컴포넌트로 1줄(=1line,solo...),2줄이상(=2line,multi...)의 경우를 하나로 관리할 때도 있는데요.이 방식으로 개발자에게 전달을 해본적이 없어서, 전달과정에서 문제가 없는지도 궁금합니다!
-
미해결김영한의 실전 자바 - 기본편
ProductOrderMain3 문제 풀이 방법에 질문 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]저는 enterProduct라는 메서드에서 객체를 생성하고 사용자의 입력까지 모두 받아 해당 객체를 return하도록 풀었습니다. 제가 풀은 방식처럼 메서드 안에서 입력까지 받는 방식이 지양해야 하는 방식인지 궁금합니다 package ref.ex; import java.util.Scanner; public class ProductOrderMain3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("입력할 주문의 개수를 입력하세요: "); int count = scanner.nextInt(); ProductOrder[] product = new ProductOrder[count]; for (int i = 0; i < product.length; i++) { product[i] = enterProduct(i); } printProduct(product); int totalPrice = calTotalPrice(product); System.out.println("총 결제 금액: " + totalPrice); } static ProductOrder enterProduct(int i) { Scanner scanner = new Scanner(System.in); ProductOrder productOrder = new ProductOrder(); System.out.println((i + 1) + "번째 주문 정보를 입력하세요."); System.out.print("상품명: "); productOrder.productName = scanner.nextLine(); System.out.print("가격: "); productOrder.price = scanner.nextInt(); System.out.print("수량: "); productOrder.quantity = scanner.nextInt(); return productOrder; } static void printProduct(ProductOrder[] product) { for (ProductOrder p : product) { System.out.println("상품명: " + p.productName + ", 가격: " + p.price + ", 수량: " + p.quantity); } } static int calTotalPrice(ProductOrder[] product) { int totalPrice = 0; for (ProductOrder p : product) { totalPrice += p.price * p.quantity; } return totalPrice; } }
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
폼에서 저장 페이지로 넘어갈 때의 POST에 대한 궁금증
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]HTTP GET 방식 기능 : 조회HTTP POST 방식 기능 : 처리 , 저장 , 등록 , ...와 같이 알고 있습니다. 즉 사진에서 노란색 밑줄 친 코드는 현재 폼에서 입력된 데이터를 /servlet/members/save 경로에서 "처리"할 것을 요구하는 코드로 이해했습니다./servlet/members/save 경로에 해당되는 MemberSaveServlet 클래스에선 폼에서 발생한 데이터를 "저장"시키는 역할을 하고요. 그런데 다음과 같이 실제 폼에서 username과 age를 입력한 후 submit을 누르면 다음과 같이 /servlet/members/save페이지가 "조회"되면서 데이터가 "저장"되는 두 가지 작업이 동시에 일어나는 것을 확인할 수 있었습니다. 저는 POST 방식은 데이터 "조회"가 아닌 데이터 "처리"로 알고 있어서 폼에서 데이터를 입력하면 페이지에는 아무런 변화가 없고 그냥 데이터가 "저장"만 되는 것으로 알고 있었습니다그래서 /servlet/members/save 페이지를 "조회"해서 데이터가 잘 "저장"됐는지 확인하려면 GET 을 통하여 해당 페이지로 넘어가게끔 추가로 로직을 구성해야되는 것으로 생각하였습니다.[핵심 질문]이에 따라 앞으로 POST 방식을 쓰는 경우 페이지가 "조회"되면서 데이터 "처리"가 동시에 순차적으로 일어난다고 봐도 될지 궁금합니다 !
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
새로고침해야만 등록한 글이 리스트에 뜹니다.
게시글 입력후 새로고침 해야만 새로 등록한 게시글이 리스트에 뜹니다. 제가 놓친 코드가 있을까요? 아니면 브라우저 문제일까요? (문제 상황 gif 이미지 첨부합니다) <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@page isELIgnored="false" %> <!DOCTYPE html> <html lang="en"> <head> <title>Spring MVC02</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> <script type="text/javascript"> $(document).ready(function () { loadList(); }); function loadList() { //서버와 통신 : 게시판 리스트 가져오기 $.ajax({ url: "boardList.do", type: "get", dataType: "json", success: makeView, error: function () { alert("error"); } }); } function makeView(data) { //콜백 함수 : 서버에서 응답으로 받은 데이터를 처리하는 함수 var listHtml = "<table class='table table-bordered'>" listHtml += "<tr>"; listHtml += "<td>번호</td>"; listHtml += "<td>제목</td>"; listHtml += "<td>작성자</td>"; listHtml += "<td>작성일</td>"; listHtml += "<td>조회수</td>"; listHtml += "</tr>"; $.each(data, function (index, obj) { listHtml += "<tr>"; listHtml += "<td>" + obj.idx + "</td>"; listHtml += "<td>" + obj.title + "</td>"; listHtml += "<td>" + obj.writer + "</td>"; listHtml += "<td>" + obj.indate + "</td>"; listHtml += "<td>" + obj.count + "</td>"; listHtml += "</tr>"; }); listHtml += "<tr>"; listHtml += "<td colspan='5'>"; listHtml += "<button class='btn btn-primary btn-sm' onclick='goForm()'>글쓰기</button>"; listHtml += "</td>"; listHtml += "</tr>"; listHtml += "</table>"; $("#view").html(listHtml); //view라는 id를 가진 div에 listHTML을 출력 $("#view").css("display", "block"); $("#wform").css("display", "none"); } function goForm() { $("#view").css("display", "none"); //숨기기 $("#wform").css("display", "block"); //보이기 } function goList() { $("#view").css("display", "block"); $("#wform").css("display", "none"); } function goInsert() { // var title = $("#title").val(); // #title에서 사용자가 입력한 value를 가져옴 // var content = $("#content").val(); // var writer = $("#writer").val(); var fData = $("#frm").serialize(); //form에 입력된 모든 데이터를 가져옴 // alert(fData); $.ajax({ url: "boardInsert.do", type: "post", data: fData, success: loadList, error: function () {alert("error");} }); } </script> </head> <body> <div class="container"> <h2>Panel Heading</h2> <div class="panel panel-default"> <div class="panel-heading">Spring MVC 02</div> <div class="panel-body" id="view">Panel Content</div> <div class="panel-body" id="wform" style="display: none"> <form id="frm"> <table class="table"> <tr> <td>제목</td> <td><input type="text" id="window-title" name="title" class="form-control"></td> </tr> <tr> <td>내용</td> <td><textarea type="textarea" rows="7" id="content" name="content" class="form-control"></textarea></td> </tr> <tr> <td>작성자</td> <td><input type="text" id="writer" name="writer" class="form-control"></td> </tr> <tr> <td colspan="2" align="center"> <button type="submit" class="btn btn-success btn-sm" onclick="goInsert()">등록</button> <button type="reset" class="btn btn-warning btn-sm">취소</button> <button type="button" class="btn btn-info btn-sm" onclick="goList()">리스트</button> </td> </tr> </table> </form> </div> <div class="panel-footer">인프런_스프1탄_박매일</div> </div> </div> </body> </html> @RequestMapping("/boardInsert.do") public @ResponseBody void boardInsert(Board vo) { boardMapper.boardInsert(vo); }
-
해결됨개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제
Working set 기반 프레임 할당 방식에 대한 질문입니다.
안녕하세요 강사님유익한 강의 감사히 듣고 있습니다.이번에 가상 메모리의 프레임 할당 방식에 대한 강의를 듣던 도중 working set 기만 모델에 대해 질문이 생겼습니다.사실 동적 할당 방식에 대한 질문이라고 볼 수도 있을 것 같은데,working set의 경우, 일정 시간을 두고, 참조되는 페이지를 통해 working set을 구성하여 프로세스에 프레임을 할당한다고 하셨습니다.그렇다면, 해당 프로세스가 가장 처음 실행이 될 때는 해당 프로세스에 대한 프레임 할당이 어떤식으로 이루어 지는지 궁금합니다.정적 할당의 경우에는 실행하기 전, 프로세스의 크기를 통해 미리 결정하고 들어가지만, 동적 할당의 경우에는 해당 프로세스를 실행하여 사용되는 프레임의 수를 통해 프레임을 할당한다고 하셨습니다.그렇다면 가장 초기에는 어떤식으로 프레임이 할당이 되어 지는지 궁금합니다. 감사합니다.새해 복 많이 받으세요~
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Unable to locate persister
이런 에러가 발생하는데 어떻게 해결해야할지 구글에 검색해도 잘 나오지 않습니다.. 틀린지 맞는지 몇번 확인했는데 틀린건 없었던것 같습니다 그리고 어제까진 실행이 됐는데 Transactional어노테이션 주석처리 하고서 실행을 해보니 안되네요 혹여나 다시 원복해서 실행해도 안되고 틀린 코드가 없는거 같은데 다른게 뭔가 문제가 있는것 같습니다 도와주세요~
-
미해결WPF (C#, 자막제공)
PropertyChanged/RelayComman 관련
안녕하세요. 강사님PropertyChanged/RelayComman 에서1. INotifyPropertyChanged2. Raisepropertychanged3. Onpropertychanged1,2,3 차이가 무엇인가요?
-
미해결Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
테스트 코드 오류
안녕하세요 선생님, 좋은 강의 항상 감사하게 잘 듣고 있습니다. 제가 지금 카테고리를 테스트 하는 강의를 수강하고 있습니다. 그런데 아무리 테스트를 하여도 blog/test.py 83번째 줄에서 Nonetype 오류가 나옵니다. id를 제대로 html에 부여 하였고 대문자, 소문자, 특수기호를 모두 확인하였습니다. 그래서 제 지식으로는 오래 생각을 해 보아도 틀린 부분을 찾을 수 없어서 어느 부분이 틀린 부분인지 선생님께 여쭤보고자 연락을 드립니다. 아래 제 깃허브 url을 첨부하도록 하겠습니다. 감사합니다. https://github.com/rapgodd/django_2023.git
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Assertions 사용 질문
package jpabook.jpashop; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringRunner.class) @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); //then Member findMember = memberRepository.find(savedId); Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember).isEqualTo(member); } }plugins { id 'java' id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1.4' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '21' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'junit:junit:4.13' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } } tasks.named('test') { useJUnitPlatform() } 이렇게 junit4 사용 하였는데 Assertions 이 구문만 쓰면 에러가 생기는데 왜 그런거죠?
-
해결됨김영한의 실전 자바 - 기본편
static final 위치?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예제를 하면서 보던 도중 static final 위치를 바꾸면 어떻게 될까 해서... 쳐보니이렇게 둘다 되었습니다.혹시( static final)로 하는 이유가 있나요?저가 생각해본게 첫째 : 관례둘째 : 지정 범위? (연산자의 우선순위처럼 이런게 정해져 있는가 생각함.)라고 생각해보았는데 답변 부탁드립니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 재귀허용 WriteUnlock() 질문드립니다!
public void WriteUnlock(){int lockCount = --_writeCount;if (lockCount == 0)Interlocked.Exchange(ref _flag, EMPTY_FLAG);}위의 코드에서 lockCount 지역변수를 만들어주신 이유가 따로 있으신지 궁금합니다! writeCount는 어차피 WriteLock을 잡은 애만 쓰는 변수라고 이해했는데, 그러면 writeCount-=1; if(writeCount==0) 이렇게 써도 괜찮지 않을까라는 생각이 들었습니다!너무 사소한 질문인 것 같은데, 열심히 듣다가 궁금해져서 질문드립니다ㅠㅠ
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의시 이론설명에 활용되는 자료가 어딨는지 모르겠어요.
안녕하세요!!현재 강의를 듣고 있는 수강생입니다!! 다름이 아니라 강의하시면서 이론에 대해 설명해주실 때, 쓰시는 자료들은 어디서 볼 수 있을까요?? 코드에 대해 공부하면서 이론적인 부분도 이해하고 넘어가면 이후의 수업에서 이해하고 직접 실행해볼 때, 더 좋을 것 같아서요!!
-
미해결처음 만난 리액트(React)
chapter5 실습질문입니다.
이와같이 나오는데 어떤부분에서 잘못되었을까요? 두번세번봐도 어디가 잘못됬는지 모르겠네요 ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션 fetch join
안녕하세요 강사님프로젝트 중 궁금한 점이 있어 질문드립니다..!6개의 엔티티를 조인해야 하는 상황인데 현업에서도 이렇게 조인을 하기도 하나요? 물론 성능에 따라 다르겠지만 몇개 정도의 테이블을 조인하는 것이 적당할까요?컬렉션 패치 조인은 1개까지만 하라고 하셨는데 현재 상황은 3개나 컬렉션이 존재합니다. 이런경우는 어떤식으로 해결하는게 좋을까요?? 강사님께서는 어떤식으로 해결하시는지 궁금합니다 ㅎㅎ감사합니다!
-
해결됨스프링 핵심 원리 - 기본편
@Configuration과 @ComponentScan 질문입니다
@Configuration이 설정 정보임을 알려주며 동시에 싱글톤을 보장할 수 있게 설정 파일 클래스에 사용하는 것은 이해했습니다. 마찬가지로 @ComponentScan 또한 @Component가 붙은 클래스들을 스캔하여 스프링 빈 자동 등록과 동시에 싱글톤 유지가 되도록 하는 것도 이해했습니다. 여기서 @ComponetScan(빈 자동 등록)을 사용할 때도 @Configuration 어노테이션도 사용이 필수인가요?@Component 사용 시에도 싱글톤을 유지하기 할 수 있다고 하셨는데, @ComponetScan위에 @Configuration 어노테이션을 사용하는 이유가 따로 있을까요?설정 파일 인식용인가요?아래와 같이 AutoAppConfig 파일 자체도 빈에 등록하기 위함인가요?@Configuration @ComponentScan( /* 탐색할 패키지의 시작 위치를 지정. 이 패키지 포함 하위 패키지 모두 탐색 두 개 이상일 때 → basePackages = {"hello.core", "hello.service"} */ basePackages = "hello.core", // 지정한 클래스의 패키지를 탐색 시작 위로 지정 basePackageClasses = AutoAppConfig.class ) public class AutoAppConfig { } 답변 부탁드립니다!감사합니다
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
자동 로그인시 자동입력방지문자 페이지로 연결
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 다른 에러는 안뜨는거보니 코드는 잘 돌아가는거 같고, time.sleep()의 초를 늘려도 계속 자동입력 방지문자 페이지가 뜨면서 로그인이 안됩니다 ㅠ 뭐가 문제일까요.. 네이버 정책이 바뀐걸까요? from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.by import By# 크롬 드라이버 자동 업데이트from webdriver_manager.chrome import ChromeDriverManagerimport timeimport pyautoguiimport pyperclip# 브라우저 꺼짐 방지chrome_options = Options()chrome_options.add_experimental_option("detach", True)# 불필요한 에러메세지 없애기chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])service = Service(executable_path=ChromeDriverManager().install())driver = webdriver.Chrome(service=service, options=chrome_options)# 웹페이지 해당 주소 이름driver.implicitly_wait(5) # 웹페이지가 로딩될 때까지 5초 기다림driver.maximize_window() # 화면 최대화driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/")# 아이디 입력창id = driver.find_element(By.CSS_SELECTOR, "#id")id.click()pyperclip.copy(" ")pyautogui.hotkey("ctrl", "v")time.sleep(5)# 비밀번호 입력창pw = driver.find_element(By.CSS_SELECTOR, "#pw")pw.click()pyperclip.copy(" ")pyautogui.hotkey("ctrl", "v")time.sleep(5)# 로그인 버튼login_btn = driver.find_element(By.CSS_SELECTOR, "#log\.login")login_btn.click()
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Lob과 @Column(columnDefinition = "TEXT")
현재 강의를 보고 스스로 게시판 서비스를 만들어 보고 있는데요!게시물 본문(content) 컬럼에 @Lob과 @Column(columnDefinition = "TEXT") 중 어떤 것을 써야 좋은지 궁금해서 질문 드립니다! 찾아봐도 자료가 많이 없더라고요..@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Post extends BaseEntity { @Column(name = "post_id") @GeneratedValue(strategy = GenerationType.IDENTITY) @Id private Long id; @Column(length = 100, nullable = false) private String title; // @Column(columnDefinition = "TEXT", nullable = false) // @Lob private String content; }
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원서비스와 회워리포지토리가 빈으로 등록이 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@Service와 @Repository를 붙였음에도 불구하고 빈으로 등록되지 않습니다.그래서 회원 서비스를 테스트 할 때 @Autowired로 자동 주입을 받지 못하고 있습니다. 어디가 문제인지 봐주실 수 있나요? 아래는 프로젝트 전체 압축파일 링크입니다https://drive.google.com/file/d/15aBoeMbIf_z0BXL8zpERp_2J5upJGesC/view?usp=drive_link