| 어노테이션 | 설명 |
|---|---|
@Entity | 해당 클래스를 데이터베이스 테이블과 매핑 |
@Id | 해당 테이블의 Primary Key (PK) 지정 |
@Table(name="테이블명") | 테이블 이름 지정 (생략 시 클래스명 사용) |
@GeneratedValue(strategy = GenerationType.IDENTITY) | auto_increment 활성화 |
@Column(속성명=값) | 컬럼 속성 정의 |
@Column 주요 속성| 속성 | 값 | 설명 |
|---|---|---|
nullable | true / false | null 허용 여부 |
unique | true / false | 중복 허용 여부 |
name | "컬럼명" | DB 컬럼명 지정 (생략 시 변수명 사용) |
length | 숫자 | 문자열 컬럼의 길이 제한 |
insertable | true / false | insert 쿼리 포함 여부 |
updatable | true / false | update 쿼리 포함 여부 |
columnDefinition | 문자열 | 직접 SQL 타입 정의 (예: TEXT, VARCHAR 등) |
💡 Tip:
insertable=false,updatable=false설정은 자동 갱신 방지에 유용하다.
createDate, updateDate 필드 자동 주입 @EnableJpaAuditing 주입 @Getter
@MappedSuperclass // Entity 상속용으로 사용
@EntityListeners(AuditingEntityListener.class) // Auditing 활성화
public class BaseTime {
@CreatedDate // 현재 날짜 및 시간 자동 주입
private LocalDateTime createDate; // 생성일
@LastModifiedDate // 수정 날짜 자동 주입
private LocalDateTime updateDate; // 수정일
}
BaseTime을 상속@Entity
public class UserEntity extends BaseTime {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
}
📘 결과: INSERT 시
createDate, UPDATE 시updateDate자동 반영.
| 언어 / 프레임워크 | 주요 통신 기술 |
|---|---|
| JavaScript | fetch() |
| JQuery | $.ajax() |
| React | axios |
| Flutter | DIO |
| 환경 | 관리 파일 / 설치 방식 |
|---|---|
| Spring | build.gradle |
| JavaScript | CDN |
| React | npm (Node Package Manager) |
| Flutter | pubspec.yaml |
📦 공식 패키지 공유 사이트: https://pub.dev/
pubspec.yaml 파일의 dependencies: 아래에 추가 dependencies:
dio: ^5.9.0
Dio 객체 생성 import 'package:dio/dio.dart';
final dio = Dio();
⚠️ 주의사항:
Flutter 앱 환경은 localhost 접근 불가능, 실제 IP 주소 또는 도메인 사용 필요.
import 'package:dio/dio.dart';
void main() async {
final dio = Dio();
try {
final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
print(response.data);
} catch (e) {
print("요청 실패: $e");
}
}
💡
await와async를 함께 사용하여 비동기 통신을 처리한다.
| 문법 | 설명 |
|---|---|
initState() | 위젯이 최초 실행될 때 1회 실행, React의 useEffect(()=>{}, [])와 유사 |
setState((){}) | 변수의 상태 변경 및 화면 리렌더링 |
dispose() | 위젯이 사라질 때 실행 (리소스 정리용) |
class MyApp extends StatefulWidget {
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String message = "Hello Flutter";
void initState() {
super.initState();
print("initState 실행됨!");
}
void changeText() {
setState(() {
message = "상태가 변경되었습니다!";
});
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("DIO Example")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(message),
ElevatedButton(onPressed: changeText, child: Text("Change Text"))
],
),
),
);
}
}